Android不規則圖形和判斷座標的位置

代碼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

相關文章
相關標籤/搜索