Android音视频开发:通过三种方式绘制图片
Posted 学杰杰杰杰.
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android音视频开发:通过三种方式绘制图片相关的知识,希望对你有一定的参考价值。
在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"/>
以上是关于Android音视频开发:通过三种方式绘制图片的主要内容,如果未能解决你的问题,请参考以下文章
Android 音视频开发之基础篇 使用 SurfaceView绘制一张图片
Qt音视频开发23-视频绘制QPainter方式(占用CPU)
Android音视频 OpenGL ES2.0 绘制图片纹理