1. 定義 MyPaintView 組件java
public class MyPaintView extends View { private List<Point> allPoint = new ArrayList<Point>(); public MyPaintView(Context context, AttributeSet attrs) { super(context, attrs); super.setBackgroundColor(Color.WHITE); super.setOnTouchListener(new OnTouchListenerImp()); } private class OnTouchListenerImp implements OnTouchListener { @Override public boolean onTouch(View v, MotionEvent event) { //Point類記錄當前的X和Y座標 Point p = new Point((int)event.getX(),(int)event.getY()); if(event.getAction() == MotionEvent.ACTION_DOWN) { //判斷擡起 allPoint = new ArrayList<Point>(); //開始新的記錄 allPoint.add(p); //記錄座標點 } else if(event.getAction() == MotionEvent.ACTION_UP) { allPoint.add(p); //記錄座標點 MyPaintView.this.postInvalidate(); //重繪 } return true; } } @Override protected void onDraw(Canvas canvas) { //進行繪圖 Paint p = new Paint(); p.setColor(Color.RED); //設置顏色 if(allPoint.size()>1) { Iterator<Point> iter = allPoint.iterator(); Point first = null; Point last = null; while(iter.hasNext()) { //迭代輸出 if(first == null) { first = (Point) iter.next(); } else { if(last != null) { first = last; //修改起始點 } last = (Point) iter.next(); //結束點 canvas.drawLine(first.x,first.y,last.x,last.y,p); } } } super.onDraw(canvas); } }
2. 在activity_main.xml 中要注意,MyPaintView是自定義的,要加入完整的包名android
<com.example.administrator.ontouchtest.MyPaintView android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/paintView"/>
3. 編寫MainActivitycanvas
public class MainActivity extends AppCompatActivity { private TextView info = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }