package com.edu; import android.app.Activity; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; import android.os.Bundle; import android.view.Display; import android.view.MotionEvent; import android.view.View; public class Paint_TestActivity extends Activity { /** Called when the activity is first created. */ Paint mPaint; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.main); // Display display=getWindowManager().getDefaultDisplay(); setContentView(new MyView(this)); mPaint=new Paint(); mPaint.setAntiAlias(true); mPaint.setDither(true); mPaint.setColor(0xFFFF0000); mPaint.setStyle(Paint.Style.STROKE); mPaint.setStrokeJoin(Paint.Join.ROUND); mPaint.setStrokeCap(Paint.Cap.ROUND); mPaint.setStrokeWidth(12); } class MyView extends View{ Bitmap mBitmap; Canvas mCanvas; Paint mBitmaPaint; Path mPath; public MyView(Activity activity) { super(activity); // TODO Auto-generated constructor stub Display display=activity.getWindowManager().getDefaultDisplay(); mBitmap=Bitmap.createBitmap(display.getWidth(), display.getHeight(), Bitmap.Config.ARGB_8888); mCanvas=new Canvas(mBitmap); mPath=new Path(); mBitmaPaint=new Paint(Paint.DITHER_FLAG); } protected void onDraw(Canvas canvas) { canvas.drawColor(0xFFAAAAAA); System.out.println("onDraw>>>>>>>>>>>>>>>>>>>>>"+mPath.toString()); canvas.drawBitmap(mBitmap, 10, 10, mBitmaPaint); canvas.drawPath(mPath, mPaint); } private float mX, mY; private static final float TOUCH_TOLERANCE = 4; private void touch_start(float x, float y) { mPath.reset(); mPath.moveTo(x, y); mX = x; mY = y; } private void touch_move(float x, float y) { System.out.println("move 移动中>>>>>>>>>>>>>>>>>>"); float dx = Math.abs(x - mX); float dy = Math.abs(y - mY); if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) { // mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2); mPath.quadTo(mX, mY, x, y); mX = x; mY = y; } } private void touch_up() { mPath.lineTo(mX, mY); // commit the path to our offscreen mCanvas.drawPath(mPath, mPaint); System.out.println("接触over。。。》》》》》》》 "); // kill this so we don't double draw mPath.reset(); } @Override public boolean onTouchEvent(MotionEvent event) { // 它不停地调用 跟时间 有关系 cpu 是个分时系统 // 画同样长度的线用不同的时间在屏幕 // 在logCat输出的调试信息 时间长的 System.out.println( 越多 float x = event.getX(); float y = event.getY(); switch (event.getAction()) { case MotionEvent.ACTION_DOWN: touch_start(x, y); invalidate();//回调onDraw 重绘在屏幕上面 break; case MotionEvent.ACTION_MOVE: touch_move(x, y); invalidate(); break; case MotionEvent.ACTION_UP: touch_up(); invalidate(); break; } return true; } } }