什么是双缓冲技术?双缓冲技术就是当用户操作界面完成后,会有一个缓冲区保存用户操作的结果。

为什么要使用双缓冲技术?拿Android 游戏开发来说,界面贞每次都是全部重画的,也就说画了新的,旧的就没了,所以需要使用双缓冲技术保存之前的内容。

如何实现双缓冲?使用一个Bitmap对象保留之前的画布即可。

package com.example.phonegaptest; 

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View; 

public class DrawView extends View {
 float preX;
 float preY;
 private Path path;
 public Paint paint = null;
 final int VIEW_WIDTH = 320;
 final int VIEW_HEIGHT = 480;
 Bitmap cacheBitmap = null;
 Canvas cacheCanvas = null; 

 public DrawView(Context context, AttributeSet set) {
  super(context, set);
  cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT,
    Config.ARGB_8888);
  cacheCanvas = new Canvas(); 

  path = new Path();
  cacheCanvas.setBitmap(cacheBitmap); 

  paint = new Paint(Paint.DITHER_FLAG);
  paint.setColor(Color.RED);
  paint.setStyle(Paint.Style.STROKE);
  paint.setStrokeWidth(1);
  paint.setAntiAlias(true);
  paint.setDither(true);
 } 

 @Override
 public boolean onTouchEvent(MotionEvent event) {
  float x = event.getX();
  float y = event.getY(); 

  switch (event.getAction()) {
  case MotionEvent.ACTION_DOWN:
   path.moveTo(x, y);
   preX = x;
   preY = y;
   break;
  case MotionEvent.ACTION_MOVE:
   path.quadTo(preX, preY, x, y);
   preX = x;
   preY = y;
   break;
  case MotionEvent.ACTION_UP:
   cacheCanvas.drawPath(path, paint);
   path.reset();
   break;
  }
  invalidate();
  return true;
 } 

 @Override
 protected void onDraw(Canvas canvas) {
  super.onDraw(canvas);
  Paint bmpPaint = new Paint();
  canvas.drawBitmap(cacheBitmap, 0, 0, bmpPaint);
  canvas.drawPath(path, paint);
 } 

} 

以上就是对Android双缓冲技术实现画板应用实例,有需要的朋友可以参考下。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。