2D Graphics Android

//package com.aflyroc.doodle.view;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.graphics.Paint.FontMetrics;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
public class FingerPaintView extends View {
  Path path;
  Bitmap bitmapBuff;
  Paint paint;
  Paint pen;
  Canvas canvas;
  Bitmap originBitmap;
  Bitmap pureBitmp;
  private float scaleWidth;
  private float scaleHeight;
  private float mX,mY;
  private static float TOUCH_TOLERANCE = 4;
  private Canvas printCanvas;
  Bitmap printBitmapBuff;
  private List pathList;
  int i = 0;
  public FingerPaintView(Context context, AttributeSet attrs) {
    super(context, attrs);
    loadBitmap(context);
    Log.i("Context context, AttributeSet attrs", "11");
  }
  public FingerPaintView(Context context) {
    super(context);
    loadBitmap(context);
    Log.i("Context context", "222");
  }
  public void loadBitmap(Context context) {
    
    pathList = new ArrayList();
    path = new Path();
    paint = new Paint();
    paint.setAntiAlias(true);
    paint.setDither(true);
    paint.setColor(Color.RED);
    paint.setStyle(Paint.Style.STROKE);
    paint.setStrokeJoin(Paint.Join.ROUND);
    paint.setStrokeCap(Paint.Cap.ROUND);
    paint.setStrokeWidth(1.6f);
    
    InputStream stream = null;//getResources().openRawResource(drawable.precheck);
    originBitmap = BitmapFactory.decodeStream(stream);
    int width = originBitmap.getWidth();
    int height = originBitmap.getHeight();
    
    DisplayMetrics metrics = context.getApplicationContext().getResources().getDisplayMetrics(); 
    int newWidth = metrics.widthPixels;
    
    int newHeight = metrics.heightPixels;
    // Â¼ÆËãËõ·ÅÂʣ¬³ß´ç³ýԭʼ³ß´ç
    scaleWidth = ((float) newWidth / width);
    
    scaleHeight = ((float) newHeight / height);
    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);
    pureBitmp = Bitmap.createBitmap(originBitmap, 0, 0, width, height,matrix, true);
    bitmapBuff = Bitmap.createBitmap(pureBitmp.getWidth(),pureBitmp.getHeight(), Bitmap.Config.ARGB_8888);
    
    canvas = new Canvas(bitmapBuff);
    canvas.drawBitmap(pureBitmp, 0, 0, paint);
  }
  public boolean onTouchEvent(MotionEvent event) {
    float x = event.getX();
    float y = event.getY();
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
      touchStart(x, y);
      invalidate();
      break;
    case MotionEvent.ACTION_MOVE:
      touchMove(x, y);
      invalidate();
      break;
    case MotionEvent.ACTION_UP:
      touchUp(x, y);
      invalidate();
      break;
    }
    return true;
  }
  protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    // »æÖƼñ
    canvas.drawBitmap(bitmapBuff, 0, 0, paint);
    // »æÖƼÎ
    canvas.drawPath(path, paint);
  }
  private void touchStart(float x, float y)
  {
    path.reset();
    path.moveTo(x, y);
    mX = x;
    mY=y;
    
  }
  private void touchMove(float x,float y)
  {
    float dx = Math.abs(x-mX);
    float dy = Math.abs(y-mY);
    if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
      path.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
            mX = x;
            mY = y;
            
        }
  }
  private void touchUp(float x,float y)
  {
    pathList.add(new Path(path));
    
    canvas.drawPath(path,paint);
    
    path.reset();
  }
  public void createPrintCanvas()
  {
    Bitmap printBitmap = Bitmap.createBitmap(originBitmap);
    
    printBitmapBuff = Bitmap.createBitmap(printBitmap.getWidth(),printBitmap.getHeight(), Bitmap.Config.ARGB_8888);
    
    Matrix matrix = new Matrix();
    matrix.postScale(1/scaleWidth, 1/scaleHeight);
    
    printCanvas = new Canvas(printBitmapBuff);
    
    printCanvas.drawBitmap(printBitmap, 0, 0, paint);
    
    for(int i=0;i    {
      Path tempPath = new Path(pathList.get(i));
      
      tempPath.transform(matrix);
      
      printCanvas.drawPath(tempPath, paint);
      
      Log.d("path", tempPath.toString());
      
    }
    
    printCanvas.save();
  }
  public float getScaleWidth() {
    return scaleWidth;
  }
  public float getScaleHeight() {
    return scaleHeight;
  }
}