Android中 view的双缓冲技术

来源:互联网 发布:网络创业园 编辑:程序博客网 时间:2024/05/16 13:48

[原]Android中 view的双缓冲技术


view实现双缓冲技术

当要绘制的数据量比较大,绘图时间比较长时,重复绘图会出现闪烁现象,引起闪烁现象的主要原因是视觉反差比较大。

使用双缓冲技术可以解决这个问题,Surfaceview默认是使用双缓冲技术的。

在Android上实现双缓冲技术的步骤是:

创建一个屏幕大小(实际绘图区域)的缓冲区(Bitmap),创建一个画布(Canvas),然后设置画布的bitmap为创建好的缓冲区,

把需要绘制的图像绘制到缓冲区上。最后把缓冲区中的图像绘制到屏幕上。

具体实现代码如下:

public class DrawView4 extends View {    private int screenWidth,screenHeight;    public DrawView4(Context context) {        super(context);        DisplayMetrics dm = context.getResources().getDisplayMetrics();        screenWidth = dm.widthPixels;        screenHeight = dm.heightPixels;    }    public Bitmap decodeBitmapFromRes(Context context, int resourceId) {        BitmapFactory.Options options = new BitmapFactory.Options();        options.inPreferredConfig = Bitmap.Config.ARGB_8888;        options.inPurgeable = true;        options.inInputShareable = true;        InputStream in = context.getResources().openRawResource(resourceId);        return BitmapFactory.decodeStream(in, null, options);    }    @Override    protected void onDraw(Canvas canvas) {        //1. 创建缓冲画布        Canvas bufferCanvas = new Canvas();        //2. 创建缓存Bitmap        Bitmap bufferBitmap = Bitmap.createBitmap(screenWidth,screenHeight, Bitmap.Config.ARGB_8888);        //3. 将缓冲位图设置给缓冲画布        bufferCanvas.setBitmap(bufferBitmap);        //4. 在缓冲画布上绘制真实的位图        bufferCanvas.drawBitmap(decodeBitmapFromRes(getContext(), R.drawable.ic_launcher), 0, 0, null);        //5. 用屏幕的画布绘制缓冲位图        canvas.drawBitmap(bufferBitmap,0,0, null);    }}
0 0
原创粉丝点击