Как обрезать круг в андроид - PullRequest
0 голосов
/ 11 декабря 2018

Мне нужно обрезать пользовательскую кнопку круга.Я сделал это с помощью viewgroup, потому что мне нужно изображение в центре.Поэтому мне нужно сделать так, чтобы при нажатии рядом с кнопкой он не работал.Вот код этого представления:

public class CircleCustom extends ViewGroup {

private static final int Circle_RADIUS_DEF = 120;
private Paint mPaintSquare;

private int mSquareColor;
private int mSquareSize;

private int width;
private int height;

private Path path;

private ImageView mButIconImage;

public CircleCustom(Context context) {
    super(context);

    init(context);
}

public CircleCustom(Context context, AttributeSet attrs) {
    super(context, attrs);

    init(context);
}

public CircleCustom(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);

    init(context);
}


private void init(Context context) {

    mButIconImage = new ImageView(context);
    mButIconImage.setImageResource(R.drawable.ic_fitness_center_black_24dp);
    addView(mButIconImage);

    mPaintSquare = new Paint(Paint.ANTI_ALIAS_FLAG);

    mSquareColor = Color.GREEN;
    mSquareSize = Circle_RADIUS_DEF * 2;

    mPaintSquare.setColor(mSquareColor);

    path = new Path();
}


@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    width = MeasureSpec.getSize(widthMeasureSpec);
    height = MeasureSpec.getSize(heightMeasureSpec);
    widthMeasureSpec = getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec);

    measureChild(mButIconImage, widthMeasureSpec, heightMeasureSpec);

    setMeasuredDimension(mSquareSize, mSquareSize);
}


@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    final int width = r - l;

    mButIconImage.layout(
            Circle_RADIUS_DEF - mButIconImage.getMeasuredWidth() / 2,
            Circle_RADIUS_DEF - mButIconImage.getMeasuredHeight() / 2,
            Circle_RADIUS_DEF + mButIconImage.getMeasuredWidth() - mButIconImage.getMeasuredWidth() / 2,
            Circle_RADIUS_DEF + mButIconImage.getMeasuredHeight() - mButIconImage.getMeasuredHeight() / 2
    );
}

@Override
protected void dispatchDraw(Canvas canvas) {
    canvas.drawCircle(Circle_RADIUS_DEF, Circle_RADIUS_DEF, Circle_RADIUS_DEF, mPaintSquare);

    canvas.translate(0,0);

    path.addCircle(Circle_RADIUS_DEF, Circle_RADIUS_DEF, Circle_RADIUS_DEF, Path.Direction.CCW);
    canvas.clipPath(path);

    super.dispatchDraw(canvas);
}

Я пытаюсь обрезать это прямо здесь:

path.addCircle(Circle_RADIUS_DEF, Circle_RADIUS_DEF, Circle_RADIUS_DEF, Path.Direction.CCW);
    canvas.clipPath(path);

Я не нашел никакой информации об отсечении пользовательского круга.Я уже пытался сделать это с помощью Rect и Arc.Оба не работают.

1 Ответ

0 голосов
/ 11 декабря 2018

Я полагаю, это ваша упрощенная проблема - у вас есть кнопка, которая является кругом, но нажатия кнопок работают так, как если бы они имели поверхность квадрата?Поправьте меня, если я ошибаюсь.

Если это правда, вы можете отказаться от использования класса Paint и загрузить кнопку как вектор или изображение в чертеж.Затем создайте из него ImageView и установите для него onClickListener.

...