First:
The key is to use the Mpath.quadto method when the finger movement is detected, and the Android SDK explains:
Add a quadratic Bézier from the last point, approaching control Point (x1,y1), and ending at (x2,y2). If no MoveTo () call had been made for this contour, the first point was automatically set to (0,0).
Chinese is linked with Bezier curve (x1,y1), (X2,y2) These two points, if there is no moveto () This method call, the first point defaults to (0,0)
Android paint is using the canvas API, such as drawing a solid rectangle, can be used in rewriting a view of the OnDraw ():
<span style= "White-space:pre" ></span>rect rect = new rect (100,100,500,500); Mpaint.setstrokewidth (5); Sets the thickness of the brush mpaint.setcolor (color.red); Sets the color of the Brush Mpaint.setstyle (Style.fill); Fills the entire graphic mpaint.setantialias (true); Anti-aliasing effect canvas.drawrect (rect, mpaint);
For the detection of finger movement, we can use ontouchevent to achieve:
Private float MX, my;private float Moppositex, moppositey;private static final float touch_tolerance = 4; When the finger moves more than 4 o'clock we go to set Path@overridepublic boolean ontouchevent (Motionevent event) {float x = Event.getx (); Float y = event.ge TY (); switch (Event.getaction ()) {case MotionEvent.ACTION_DOWN:touch_start (x, y); if (Ismirrordraw) {Touch_opposite_ Start (x, y);} Invalidate (); Break;case MotionEvent.ACTION_MOVE:touch_move (x, y), if (Ismirrordraw) {touch_opposite_move (x, y);} Invalidate (); Break;case MotionEvent.ACTION_UP:touch_up (); if (Ismirrordraw) {touch_opposite_up ();} Invalidate (); break;} return true;} 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) {float dx = math.abs (x-mx); float dy = Math.Abs (y-my); if (DX >= touch_tole RANCE | | Dy >= touch_tolerance) {mpath.quadto (MX, my, (x + MX)/2, (y + MY)/2), mx = X;my = y;}} private void Touch_up () {Mpath.lineto (MX, MY); Mcanvas.drawpath (MPath, Mpaint); Mpath.reset ();}private void Touch_opposite_up () {Moppositepath.lineto (Moppositex, MY); Mcanvas.drawpath (Moppositepath, mOppoPaint); Moppositepath.reset ();} private void Touch_opposite_move (float x, float y) {float Oppositex = oppositedrawactivity.screenwidth-x;//<span sty Le= "Font-family:arial, Helvetica, Sans-serif;" >oppositedrawactivity.screenwidth is the screen width </span>float dx = math.abs (Oppositex-moppositex); float dy = Math.abs ( Y-my), if (dx >= touch_tolerance | | dy >= touch_tolerance) {moppositepath.quadto (Moppositex, MY, (Moppositex + oppo Sitex)/2, (y + MY)/2); Moppositex = Oppositex;my = y;}} private void Touch_opposite_start (float x, float y) {moppositepath.reset (); Float Oppositex = Oppositedrawactivity.screenwidth-x;moppositepath.moveto (Oppositex, y); Moppositex = Oppositex;}
Then rewrite OnDraw ():
@Overrideprotected void OnDraw (canvas canvas) {canvas.drawcolor (0xFFAAAAAA); Canvas.drawbitmap (mbitmap, 0, 0, Mbitmappaint); Canvas.drawpath (MPath, Mpaint); if (Ismirrordraw) {Canvas.drawpath (Moppositepath, Moppopaint);}}
Code can be downloaded in http://download.csdn.net/detail/baidu_nod/7572549