Мне нужно обрезать пользовательскую кнопку круга.Я сделал это с помощью 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.Оба не работают.