這個例子,自訂了一個View,可以接受touch動作,然後在螢幕上即時的顯示出touch的軌跡,類似於線條的塗鴉。這個例子主要是示範如何將onTouchEvent與draw配合起來使用。在這個基礎上,可以做很多有用的程式。
(注意invalidate()這個方法。這個比較關鍵。加入這個方法的調用主要是為了強制View進行重畫。)
package com.arui;<br />import android.content.Context;<br />import android.graphics.Canvas;<br />import android.graphics.Color;<br />import android.graphics.Paint;<br />import android.graphics.Path;<br />import android.graphics.Paint.Style;<br />import android.view.MotionEvent;<br />import android.view.View;<br />/**<br /> * Example for hand writing.<br /> *<br /> * @author http://blog.csdn.net/arui319<br /> * @version 2010/09/07<br /> *<br /> */<br />public class HandwritingView extends View {<br />private Paint paint = null;<br />private Path path = null;<br />public HandwritingView(Context context) {<br />super(context);<br />path = new Path();<br />paint = new Paint();<br />paint.setColor(Color.YELLOW);<br />paint.setStyle(Style.STROKE);<br />paint.setAntiAlias(true);<br />this.setBackgroundColor(Color.BLACK);<br />}<br />@Override<br />public boolean onTouchEvent(MotionEvent event) {<br />if (event.getAction() == MotionEvent.ACTION_DOWN) {<br />int x = (int) event.getX();<br />int y = (int) event.getY();<br />path.moveTo(x, y);<br />invalidate();<br />return true;<br />} else if (event.getAction() == MotionEvent.ACTION_MOVE) {<br />int x = (int) event.getX();<br />int y = (int) event.getY();<br />path.lineTo(x, y);<br />invalidate();<br />return true;<br />}<br />return super.onTouchEvent(event);<br />}<br />@Override<br />protected void onDraw(Canvas canvas) {<br />super.onDraw(canvas);<br />if (path != null) {<br />canvas.drawPath(path, paint);<br />}<br />}<br />}<br />