The keyword invalidate() re-executes onDraw() , the following example moves the screen horizontally down a bit each time the screen is clicked
package com.test1; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.util.Log; import android.view.MotionEvent; import android.view.View; /** * Jiugongge unlock controls * Created by Jerry on 2015/9/21. */ public class DiyView extends View { public DiyView(Context context) { this(context, null); } public DiyView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public DiyView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } int y = 0; @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); // create a new brush Paint paint = new Paint(); paint.setColor(Color.parseColor("#00B7EE")); paint.setAntiAlias(true);//Anti-aliasing paint.setStrokeWidth(33); // draw a straight line //drawLine(float startX, float startY, float stopX, float stopY,Paint) canvas.drawLine(30,y,500,y,paint); print("draw"); } @Override public boolean onTouchEvent(MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_UP){ y+=10; invalidate();//Re-execute onDraw } return true; } public void print(String str){ Log.d("mft",str); } }