Android中 view的双缓冲技术

本文介绍了解决Android中因大量绘图导致闪烁问题的双缓冲技术。通过创建与屏幕大小相同的缓冲区Bitmap,并在该缓冲区上完成所有绘图操作,最后将缓冲区的内容一次性绘制到屏幕上,有效避免了闪烁现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[原]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);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值