Android之多媒体技术

这篇博客主要介绍了Android多媒体技术,包括位移、倒影效果、镜面效果和像素点透明的实现,以及如何使用MediaPlayer播放音频文件。此外,还讨论了SurfaceView控件,VideoView的使用,以及vitamio框架在播放多种视频格式中的作用。博客还涉及到了拍照、录像、从相册选择照片的操作,以及Android 4.4之后系统版本对图片路径Uri处理的差异。
摘要由CSDN通过智能技术生成
  • 缩放 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. 百度音乐盒完成

===========

  1. 获取当前歌曲进度和总时长

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秒获取歌曲的进度

}

  1. 在服务中添加一个播放进度的方法

/**

  • 设置播放音乐指定位置的方法

  • @param position 该位置由进度条拖动时提供

*/

private void seekToPosition(int position){

mediaPlayer.seekTo(position);

}

  1. 通过handler将数据传递到Activity更新UI

  2. 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

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值