java - 如何在android中剪辑圆圈

标签 java android custom-view clip

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

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 来做到这一点。两者都不起作用。

最佳答案

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

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

关于java - 如何在android中剪辑圆圈,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53728574/

相关文章:

java - 在Jmeter中生成 session ID

java - 如何在android中制作热词检测服务

ios - 自动布局以编程方式生成的 View

android - 如何覆盖 android 的 ArrayAdapter 中的过滤器?

android - 在Android上强制溢出菜单按钮

android - 如何在自定义 View 中添加 View ?

android - 从特定于 Xamarin.Forms 中的共享项目的平台中的自定义 View 呈现器获取数据

java - 生成的 HTML 在 GWT 中的位置

java - JFrame标题栏重叠图形

android - 应用程序运行时如何在状态栏中显示图标,包括在后台?