Как сделать пользовательскую форму кнопки? - PullRequest
0 голосов
/ 14 февраля 2019

Необходимо, чтобы щелчки работали только на выбранных областях, квадратные кнопки не помещаются

Пожалуйста, помогите мне enter image description here

1 Ответ

0 голосов
/ 15 февраля 2019

Я нашел решение, я создаю многоугольник по точкам и нажимаю на него при проверке.находится ли координата в многоугольнике

public class CustomFormView extends View {

private ArrayList<Point> points;
public Paint paint;

public CustomFormView(Context context, ArrayList<Point> points) {
    super(context);
    paint = new Paint();

    this.points = points;
}

@Override
protected void onDraw(Canvas canvas) {
    //paint.setColor(Color.TRANSPARENT);
    paint.setStyle(Paint.Style.STROKE);

    Path path = new Path();
    path.moveTo(points.get(0).x, points.get(0).y);
    for (int i = 1; i < points.size(); i++) {
        path.lineTo(points.get(i).x, points.get(i).y);
    }
    path.close();

    canvas.drawPath(path, paint);
}

@Override
public boolean onTouchEvent(MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        if (!contains(new Point(event.getX(), event.getY()))) {
            return false;
        }
    }
    return super.onTouchEvent(event);
}

public boolean contains(Point test) {
    int i;
    int j;
    boolean result = false;
    for (i = 0, j = points.size() - 1; i < points.size(); j = i++) {
        if ((points.get(i).y > test.y) != (points.get(j).y > test.y) &&
                (test.x < (points.get(j).x - points.get(i).x) * (test.y - points.get(i).y) / (points.get(j).y - points.get(i).y) + points.get(i).x)) {
            result = !result;
        }
    }
    return result;
}
}
...