Android音视频专题(一) 在 Android 平台绘制一张图片,使用至少 3 种不同的 API,ImageView,SurfaceView,自定义 View

前言

想要逐步入门音视频开发,就需要一步步的去学习整理,并积累。本文是音视频开发积累的第一篇。 对应的要学习的内容是:

在 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"

https://gitee.com/richardxiong/avdemo/compare/d3be1269cf53d891cc9b4e4075988dd40930a6a5...29a17cf7f2b922086d0e6a15e2c3c3e96502e1ec

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);
            }
        }
    }

提交 https://gitee.com/richardxiong/avdemo/compare/2b9ff829f0ffbaf2f654949adfd790caa6aa4923...6cb401880b8f8a48c67db045611764f19fe9b2cd

猜你喜欢

转载自blog.csdn.net/xfb1989/article/details/113338219