Androidのオーディオとビデオのトピック(1)少なくとも3つの異なるAPI、ImageView、SurfaceView、およびカスタムビューを使用して、Androidプラットフォームで画像を描画します

序文

オーディオとビデオの開発を段階的に開始したい場合は、段階的に学習、整理、および蓄積する必要があります。この記事は、オーディオとビデオの開発で蓄積された最初の記事です。学習する対応するコンテンツは次のとおりです。

Androidプラットフォームで絵を描くには、少なくとも3つの異なるAPI、ImageView、SurfaceView、およびカスタムビューを使用します。

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)が発生した場合:ストリームをデコードできません:java.io.FileNotFoundException:sdcard / 22.jpg:オープンに失敗しました:EACCES(アクセスが拒否されました)の問題

マニフェストファイルに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.ビューをカスタマイズして絵を描きます

    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