歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

使用雙緩沖技術實現Android畫板應用

什麼是雙緩沖技術?雙緩沖技術就是當用戶操作界面完成後,會有一個緩沖區保存用戶操作的結果。

為什麼要使用雙緩沖技術?拿Android 游戲開發來說,界面貞每次都是全部重畫的,也就說畫了新的,舊的就沒了,所以需要使用雙緩沖技術保存之前的內容。

如何實現雙緩沖?使用一個Bitmap對象保留之前的畫布即可。

  1. package com.example.phonegaptest;  
  2.   
  3. import android.content.Context;  
  4. import android.graphics.Bitmap;  
  5. import android.graphics.Bitmap.Config;  
  6. import android.graphics.Canvas;  
  7. import android.graphics.Color;  
  8. import android.graphics.Paint;  
  9. import android.graphics.Path;  
  10. import android.util.AttributeSet;  
  11. import android.view.MotionEvent;  
  12. import android.view.View;  
  13.   
  14. public class DrawView extends View {  
  15.     float preX;  
  16.     float preY;  
  17.     private Path path;  
  18.     public Paint paint = null;  
  19.     final int VIEW_WIDTH = 320;  
  20.     final int VIEW_HEIGHT = 480;  
  21.     Bitmap cacheBitmap = null;  
  22.     Canvas cacheCanvas = null;  
  23.   
  24.     public DrawView(Context context, AttributeSet set) {  
  25.         super(context, set);  
  26.         cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH, VIEW_HEIGHT,  
  27.                 Config.ARGB_8888);  
  28.         cacheCanvas = new Canvas();  
  29.   
  30.         path = new Path();  
  31.         cacheCanvas.setBitmap(cacheBitmap);  
  32.   
  33.         paint = new Paint(Paint.DITHER_FLAG);  
  34.         paint.setColor(Color.RED);  
  35.         paint.setStyle(Paint.Style.STROKE);  
  36.         paint.setStrokeWidth(1);  
  37.         paint.setAntiAlias(true);  
  38.         paint.setDither(true);  
  39.     }  
  40.   
  41.     @Override  
  42.     public boolean onTouchEvent(MotionEvent event) {  
  43.         float x = event.getX();  
  44.         float y = event.getY();  
  45.   
  46.         switch (event.getAction()) {  
  47.         case MotionEvent.ACTION_DOWN:  
  48.             path.moveTo(x, y);  
  49.             preX = x;  
  50.             preY = y;  
  51.             break;  
  52.         case MotionEvent.ACTION_MOVE:  
  53.             path.quadTo(preX, preY, x, y);  
  54.             preX = x;  
  55.             preY = y;  
  56.             break;  
  57.         case MotionEvent.ACTION_UP:  
  58.             cacheCanvas.drawPath(path, paint);  
  59.             path.reset();  
  60.             break;  
  61.         }  
  62.         invalidate();  
  63.         return true;  
  64.     }  
  65.   
  66.     @Override  
  67.     protected void onDraw(Canvas canvas) {  
  68.         super.onDraw(canvas);  
  69.         Paint bmpPaint = new Paint();  
  70.         canvas.drawBitmap(cacheBitmap, 00, bmpPaint);  
  71.         canvas.drawPath(path, paint);  
  72.     }  
  73.   
  74. }  
Copyright © Linux教程網 All Rights Reserved