关于android:Android音视频开发一通过三种方式绘制图片

5次阅读

共计 2089 个字符,预计需要花费 6 分钟才能阅读完成。

在 Android 平台绘制图片的形式罕用的有三种,别离是 ImageViewd,SurfaceView 以及自定义 View。上面别离对这三种绘图形式做介绍。

1. ImageView 绘制图片

ImageView 绘制图片也是 Android 中一种最简略的绘图形式,代码为:

Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+File.separator+"11.jpg");
imageView.setImageBitmap(bitmap);

2. SurfaceView 绘制图片

SurfaceView 绘制图片绝对简单,与个别的 View 不同,SurfaceView 提供一个间接的绘图外表(Surface)嵌入到视图构造档次中。你能够管制这个 Surface 的格局,大小,SurfaceView 负责在屏幕上正确的摆放 Surface。简略说就是 SurfaceView 领有本人的 Surface,它与宿主窗口是拆散的。
咱们晓得窗口中的 view 共享一个 window,window 又对应一个 Surface,所以窗口中的 view 共享一个 Surface,而 SurfaceView 领有本人的 Surface。SurfaceView 会创立一个置于利用窗口之后的新窗口,SurfaceView 相当于在 Window 上挖一个洞,它就是显示在这个洞里,其余的 View 是显示在 Window 上,所以 View 能够显示在 SurfaceView 之上,也能够增加一些层在 SurfaceView 之上。
SurfaceView 的窗口刷新的时候不须要重绘应用程序的窗口而 android 一般窗口的视图绘制机制是一层一层的,任何一个子元素或者是部分的刷新都会导致整个视图构造全部重绘一次。
应用 SurfaceView 进行绘图的代码为:

SurfaceView surfaceview = (SurfaceView)findviewById(R.id.surface);
SurfaceView.getHolder().addCallback(new SurfaceHolder.Callback(){
    @Override
    public void surfaceCreated(SurfaceHolder surfaceHolder){if(surfaceHold == null){return;}

    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setStyle(Paint.Style.STROKE);

    Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+File.seperator+"11.jpg"); // 获取 bitmap
    Canvas canvas = surfaceHolder.lockCanvas(); // 先锁定以后 surfaceView 的画布
    canvas.drawBitmap(bitmap,0,0,paint); // 执行绘制操作
    surfaceHolder.unlockCanvasAndPost(canvas); // 解除锁定并显示在界面上
 }
  
 @Override
 public void surfaceChanged(SurfaceHolder surfaceHolder,int i,int i1,int i2){ }
  
 @Override
 public void surfaceDestroyed(SurfaceHolder surfaceHolder){}});

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 = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getPath()+File.separator+"11.jpg"); // 获取 bitmap
    }

    @Override
    protected void onDraw(Canvas canvas){super.onDraw(canvas);
        
        // 不倡议在 onDraw 做任何分配内存的操作
        if(bitmap != null){canvas.drawBitmap(bitmap,0,0,paint);
        }
    }
}

最初须要留神:以上读取图片须要取得读取权限,须要在.xml 文件中退出以下代码:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
正文完
 0