package com.bosi.chineseclass.su.ui.view; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitmap.Config; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; import android.graphics.PorterDuff; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class WordPadView extends View { // 缩放 public static Bitmap resizeImage(Bitmap bitmap, int width, int height) { int originWidth = bitmap.getWidth(); int originHeight = bitmap.getHeight(); float scaleWidth = ((float) width) / originWidth; float scaleHeight = ((float) height) / originHeight; Matrix matrix = new Matrix(); matrix.postScale(scaleWidth, scaleHeight); Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, originWidth, originHeight, matrix, true); return resizedBitmap; } private Paint mPaint; private Path mPath; private Bitmap mBitmap; private Canvas mCanvas; private int screenWidth, screenHeight; private float currentX, currentY; public WordPadView(Context context) { this(context, 0, 0); } public WordPadView(Context context, AttributeSet attrs) { this(context, null, 0); // TODO Auto-generated constructor stub } public WordPadView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, 0, 0); // TODO Auto-generated constructor stub } public WordPadView(Context context, int screenWidth, int screenHeight) { super(context); this.screenWidth = 400; this.screenHeight = 400; init(); } public void rest(){ if (mCanvas!=null) { mPath.reset(); mCanvas.drawPath(mPath, mPaint); invalidate(); } } // 清除画板 public void clear() { if (mCanvas != null) { mPath.reset(); mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); invalidate(); } } public Bitmap getPaintBitmap() { return resizeImage(mBitmap, 320, 480); } public Path getPath() { return mPath; } private void init() { mPaint = new Paint(); mPaint.setAntiAlias(true); // 去除锯齿 mPaint.setStrokeWidth(5); mPaint.setStyle(Paint.Style.STROKE); mPaint.setColor(Color.BLACK); mPath = new Path(); mBitmap = Bitmap.createBitmap(screenWidth, screenHeight, Config.ARGB_8888); mCanvas = new Canvas(mBitmap); // mCanvas.drawColor(Color.WHITE); } @Override protected void onDraw(Canvas canvas) { canvas.drawBitmap(mBitmap, 0, 0, null); canvas.drawPath(mPath, mPaint); } @Override public boolean onTouchEvent(MotionEvent event) { float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: currentX = x; currentY = y; mPath.moveTo(currentX, currentY); break; case MotionEvent.ACTION_MOVE: currentX = x; currentY = y; mPath.quadTo(currentX, currentY, x, y); // 画线 break; case MotionEvent.ACTION_UP: mCanvas.drawPath(mPath, mPaint); break; } invalidate(); return true; } }