双缓冲技术

主要原理:当一个动画争先显示时,程序又在改变它,前画面还没有显示完,程序又请求重新绘制,这样屏幕就会不停闪烁。

为了避免闪烁,可以使用双缓冲技术,将要处理的图片都在内存中绘制好之后,再将其显示在屏幕上。这样显示出来的总是完整的图像,不会发生闪烁。

双缓冲的核心技术就是先通过setBitmap方法将要绘制的所有图形绘制到一个Bitmap上,然后再来调用drawBitmap方法绘制出这个Bitmap上,显示在屏幕上。

package ...;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.view.MotionEvent;
import android.view.View;

public class GameView extends View implements Runnable
{
    //声明Bitmap对象
    Bitmap mBitQQ = null;
    Paint mPaint = null;
    //创建一个缓冲区
    Bitmap mSCBitmap = null;
    //构建canvas对象
    Canvas mCanvas = null;

    public GameView(Context context)
    {
        super(context);

        //装载资源
        mBitQQ = ((BitmapDrawable)getResources().getDrawable(R.drawable.qq)).getBitmap();

        //创建屏幕大小的缓冲区
        mSCBitmap = Bitmap.createBitmap(800,800, Bitmap.Config.ARGB_8888);

        //创建Canvas
        mCanvas = new Canvas();

        //设置将内容绘制在mSCBitmap上
        mCanvas.setBitmap(mSCBitmap);

        mPaint = new Paint();

        //将mBitQQ绘制到mSCBitmap上
        mCanvas.drawBitmap(mBitQQ,0,0,mPaint);

        //开启线程
        new Thread(this).start();
    }

    public void onDraw(Canvas canvas)
    {
        super.onDraw(canvas);

        //将mSCBitmap显示到屏幕上
        canvas.drawBitmap(mSCBitmap,0,0,mPaint);
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        return true;
    }

    //线程处理
    public void run()
    {
        while(!Thread.currentThread().isInterrupted())
        {
            try
            {
                Thread.sleep(100);
            }
            catch (InterruptedException e)
            {
                Thread.currentThread().interrupt();
            }
            //使用postInvalidate可以直接在线程中更新界面
            postInvalidate();
        }
    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值