package com.mcxtzhang.cstviewdemo.widget;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.Region;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;
public class RegionClickView extends View {
Paint mPaint;
Region globalRegion;
Region circleRegion1;
Region circleRegion2;
Path circlePath1;
Path circlePath2;
public RegionClickView(Context context) {
super(context);
}
public RegionClickView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
mPaint.setStyle(Paint.Style.FILL);
mPaint.setColor(Color.GRAY);
// 用Path创建两个圆
circlePath1 = new Path();
circlePath2 = new Path();
circlePath1.addCircle(100, 100, 100, Path.Direction.CW);
circlePath2.addCircle(200, 200, 100, Path.Direction.CW);
// 创建 Region
circleRegion1 = new Region();
circleRegion2 = new Region();
}
public RegionClickView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
// 将剪裁边界设置为视图大小
globalRegion = new Region(0, 0, w, h);
// ▼将 Path 添加到 Region 中
circleRegion1.setPath(circlePath1, globalRegion);
circleRegion2.setPath(circlePath2, globalRegion);
}
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
int x = (int) event.getX();
int y = (int) event.getY();
// ▼点击区域判断
if (circleRegion1.contains(x, y)) {
Toast.makeText(this.getContext(), "圆1被点击", Toast.LENGTH_SHORT).show();
}
if (circleRegion2.contains(x, y)) {
Toast.makeText(this.getContext(), "圆2被点击", Toast.LENGTH_SHORT).show();
}
break;
}
return super.onTouchEvent(event);
}
@Override
protected void onDraw(Canvas canvas) {
// ▼注意此处将全局变量转化为局部变量,方便 GC 回收 Canvas
Path circle1 = circlePath1;
Path circle2 = circlePath2;
// 绘制两个圆
canvas.drawPath(circle1, mPaint);
canvas.drawPath(circle2, mPaint);
}
}