如何在android中剪辑圆圈

Posted

技术标签:

【中文标题】如何在android中剪辑圆圈【英文标题】:How to clip circle in android 【发布时间】:2018-12-11 16:38:01 【问题描述】:

我需要剪辑自定义圆形按钮。我是通过视图组完成的,因为我需要图像在中心。所以我需要使它在按钮附近按下时不起作用。这是该视图的代码:

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】:

我相信这是您的问题简化了 - 您有一个圆形按钮,但按钮点击工作就好像它有一个正方形的表面?如果我错了,请纠正我。

如果是这样,您可以放弃使用 Paint 类并将按钮作为矢量或图像上传到可绘制对象中。然后,从中创建一个 ImageView 并在其上设置 onClickListener。

【讨论】:

“按钮点击就像它有一个正方形的表面一样”。当你说“按钮”时,你是什么意思?只需使用 OnClickListener 或 Button 之类的类查看?

以上是关于如何在android中剪辑圆圈的主要内容,如果未能解决你的问题,请参考以下文章

使用剪辑路径从圆圈中的 4 条 svg 线中删除 37px

如何在Android中绘制一个圆圈并移动它/拖动它

如何在 android 中剪辑星星?但是明星的样子很清晰

如何在 android/andengine 中剪辑或屏蔽实体?

如何在 Xamarin Android 中剪辑滚动视图的边界

如何在 Android 上更改默认 ProgressBar 圆圈颜色