-
缩放
matrix.setScale(0.5f, 0.5f);
-
位移
matrix.setTranslate(80, 0);
-
倒影效果
matrix.setScale(1.0f, -1.0f); //x轴不变 y轴反转
//post是在上一次修改的基础上进行修改,set则是每次都是新的变化 会覆盖上一次的修改
matrix.postTranslate(0, srcBitmap.getHeight());
- 镜面效果
matrix.setScale(-1.0f, 1.0f);
matrix.postTranslate(srcBitmap.getWidth(), 0);
- 设置像素点透明
alterbBitmap.setPixel((int)event.getX()+i, (int)event.getY()+j, Color.TRANSPARENT);
5. 使用MediaPlayer播放音频文件
=======================
作用:这个类可用于播放音频或者视频
6. 百度音乐盒完成
===========
- 获取当前歌曲进度和总时长
private void updateSeekBar() {
//6. 获取音乐文件的总时长 Gets the duration of the file.
final int duration = mediaPlayer.getDuration();
//7. 构造定时器
Timer timer = new Timer();
//7.1 创建任务
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
//8. 获取歌曲的当前进度
int currentPosition = mediaPlayer.getCurrentPosition();
//9. 通过handler发送歌曲的信息到Activity更新UI
//9.1 通过将数据封装到Message中
Message msg = new Message();
//9.2 封装多条数据到Message中 将那些数据封装到Bundle中,其实Bundle底层就是Map
Bundle bundle = new Bundle();
bundle.putInt(“duration”, duration);
bundle.putInt(“currentPosition”, currentPosition);
msg.setData(bundle);
//10. 发送数据
MainActivity.handler.sendMessage(msg);
}
};
//7.2 300毫秒后 每隔1秒执行一次任务
timer.schedule(timerTask, 300, 1000); //每隔1秒获取歌曲的进度
}
- 在服务中添加一个播放进度的方法
/**
-
设置播放音乐指定位置的方法
-
@param position 该位置由进度条拖动时提供
*/
private void seekToPosition(int position){
mediaPlayer.seekTo(position);
}
-
通过handler将数据传递到Activity更新UI
-
SeekBar处理数据
sb_seekm.setMax(duration); //设置进度条最大值
sb_seekm.setProgress(currentPosition); //设置进度条当前进度
7. SurfaceView介绍
=================
-
SurfaceView控件是一个重量级控件
-
内部维护了2个线程
-
A 获取数据 负责显示
-
B 负责显示 获取数据
-
它直接可以在子线程更新UI 与进度相关的控件可以直接在子线程更新Ui
//找到控件
final SurfaceView sfv = (SurfaceView) findViewById(R.id.sfv);
final SurfaceHolder surfaceHolder = sfv.getHolder();
//添加一个callback
surfaceHolder.addCallback(new Callback() {
//当surfaceview销毁的时候调用
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
System.out.println(“surfaceDestroyed”);
if (player!=null && player.isPlaying()) {
//获取当前视频播放的位置
currentPosition = player.getCurrentPosition();
player.stop();
}
}
//当surfaceview 初始化了
@Override
public void surfaceCreated(Surfa