Andriod 自定义View视图双缓冲画图
在画的像素点多的时候,为了遍免出现闪烁的情况,需要进行双缓冲画图。
所谓双缓冲画图,意思就是先在内存中将Bitmap画好。然后再显示到界面上
写了个小Demo做示例:
package com.ndt.eutg.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; import androidx.annotation.Nullable; public class RulerTopAView extends View { Paint paint = null; private Bitmap bitmapCache; // 缓存位图,避免重复创建 private Canvas canvasCache; // 缓存画布,用于绘制bitmapCache public RulerTopAView(Context context) { super(context); InitPaint(); } public RulerTopAView(Context context, @Nullable AttributeSet attrs) { super(context, attrs); InitPaint(); } public RulerTopAView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); InitPaint(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); if (bitmapCache != null) { / // 先在bitmapCache上绘制内容,然后绘制到屏幕上,减少闪烁 canvasCache.drawColor(Color.WHITE); // 清屏或绘制背景等操作... Rect rect = new Rect(10,10,200,200); canvasCache.drawRect(rect,paint); // 在canvasCache上绘制你的图形... //先在内存画好后,再一次性画到界面上 canvas.drawBitmap(bitmapCache, 0, 0, null); // 将bitmapCache的内容绘制到屏幕上 } } @Override protected void onSizeChanged(int w, int h, int oldw, int oldh) { super.onSizeChanged(w, h, oldw, oldh); bitmapCache = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888); // 创建或重新创建bitmap缓存 canvasCache = new Canvas(bitmapCache); // 创建画布用于绘制bitmapCache } private void InitPaint() { paint = new Paint(); paint.setColor(Color.GREEN); paint.setTextSize(20); paint.setStrokeWidth(2); } }
浙公网安备 33010602011771号