前言
想要逐步入门音视频开发,就需要一步步的去学习整理,并积累。本文是音视频开发积累的第一篇。 对应的要学习的内容是:
在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View。
1. ImageView 绘制图片
Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg");
imageView.setImageBitmap(bitmap);
如代码提交, 如果遇到 02-04 17:25:52.573 E/BitmapFactory( 4789): Unable to decode stream: java.io.FileNotFoundException: sdcard/22.jpg: open failed: EACCES (Permission denied) 问题
在清单文件张添加 android:requestLegacyExternalStorage="true"
2. SurfaceView 绘制图片
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surface);
surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
@Override
public void surfaceCreated(SurfaceHolder surfaceHolder) {
if (surfaceHolder == null) {
return;
}
Paint paint = new Paint();
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
// 获取bitmap
Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath() + File.separator + "11.jpg");
// 先锁定当前surfaceView的画布
Canvas canvas = surfaceHolder.lockCanvas();
//执行绘制操作
canvas.drawBitmap(bitmap, 0, 0, paint);
// 解除锁定并显示在界面上
surfaceHolder.unlockCanvasAndPost(canvas);
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
}
});
3. 自定义 View 绘制图片
public class CustomView extends View {
Paint paint = new Paint();
Bitmap bitmap;
public CustomView(Context context) {
super(context);
paint.setAntiAlias(true);
paint.setStyle(Paint.Style.STROKE);
// 获取bitmap
bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()
+ File.separator + "11.jpg");
}
@Override
public void draw(Canvas canvas) {
super.draw(canvas);
// 不建议在onDraw做任何分配内存的操作
if (bitmap != null) {
canvas.drawBitmap(bitmap, 0, 0, paint);
}
}
}