public class CanvasActivity extends AppCompatActivity { String TAG="test2"; ImageView imageView; Canvas canvas; Paint paint; int startX=0; int startY=0; Bitmap bitmap; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); imageView=(ImageView)findViewById(R.id.imageView); init(); } private void init() { //创建空白画布 = Bitmap.createBitmap Bitmap (getWindowManager () getDefaultDisplay () getWidth (), getWindowManager () getDefaultDisplay () getHeight (), Bitmap.Config.ARGB_4444....); Canvas the Canvas new new = (Bitmap); // set the canvas background color canvas.drawRGB (0xAA, 0xAA, 0xAA); Paint new new = the Paint (); // set the brush width paint.setStrokeWidth (10); // set brush color paint.setColor (0xFFFF0000); imageView.setImageBitmap (Bitmap ); imageView.setOnTouchListener (new new View.OnTouchListener () { @Override public Boolean OnTouch (View V, the MotionEvent Event) { IF (event.getAction () == MotionEvent.ACTION_DOWN) { Log.e (the TAG, "ACTION_DOWN0"); = startX (int) (event.getX ()); the startY is = (int) (event.getY ()); } the else IF (event.getAction () == MotionEvent.ACTION_MOVE) { Log.e(TAG,"ACTION_MOVE startX="+startX +" startY="+startY +" v.getX()="+(int)event.getX() +" v.getY()="+(int)event.getY()); canvas.drawLine(startX,startY,(int)event.getX(),(int)event.getY(),paint); startX=(int)(event.getX()); startY=(int)(event.getY()); imageView.setImageBitmap(bitmap); }else if(event.getAction()==MotionEvent.ACTION_UP){ Log.e(TAG,"ACTION_UP"); try { Path = Environment.getExternalStorageDirectory String () + + File.separator "test.png"; FileOutputStream fileOutputStream = new FileOutputStream(path); bitmap.compress (Bitmap.CompressFormat.PNG, 100, FileOutputStream); // save the image canvas.drawRGB (0xAA, 0xAA, 0xAA) ; / / Clear data drawing board imageView.setImageBitmap (Bitmap); } the catch (Exception EX) { } } return to true; } }); }