代碼java
import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.Region; import android.view.MotionEvent; import android.view.View; import android.widget.Toast; public class PathView extends View { private Path p = new Path(); private Region re = new Region(); public PathView(Context context) { super(context); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //起始頂點,繪製的方向爲左下右上。 p.moveTo(100, 100); p.lineTo(100, 150); //繪製一個貝塞爾曲線,第一個頂點是來控制曲線的弧度和方向,第二個頂點是弧線的結束頂點。 p.quadTo(230, 150, 300, 200); p.quadTo(200, 150, 300, 200); p.quadTo(200, 120, 150, 100); p.close(); //構造一個區域對象,左閉右開的。 RectF r = new RectF(); //計算控制點的邊界 p.computeBounds(r, true); //設置區域路徑和剪輯描述的區域 re.setPath(p, new Region((int) r.left, (int) r.top, (int) r.right, (int) r.bottom)); Paint paint = new Paint(); paint.setColor(Color.RED); paint.setStrokeWidth(1); paint.setStyle(Paint.Style.STROKE); //設置抗鋸齒。 paint.setAntiAlias(true); //paint.setFilterBitmap(true); canvas.drawPath(p, paint); } @Override public boolean onTouchEvent(MotionEvent event) { //判斷所點擊點(x,y)是否屬於剛纔繪製的圖形區域。 if (event.getAction() == MotionEvent.ACTION_DOWN) { boolean isContains = re.contains((int) event.getX(), (int) event.getY()); Toast.makeText(getContext(), "點擊了繪製區域" + isContains, Toast.LENGTH_SHORT).show(); } return true; } }
** 效果圖 **
android