android - 创建带有透明圆圈的视图
问题描述
我想创建一个带有圆角和居中圆形按钮的视图。目前我正在使用一个带有圆形边框的矩形作为视图背景(绿色部分)和一个白色圆形,其中包含按钮(带有 android 徽标的绿色按钮)。
只要背景(目前为黄色/棕色,只是为了更好地可视化)具有与圆形相同的颜色,就可以正常工作。
但现在我想使用渐变背景:用透明圆圈实现相同外观的聪明方法是什么?
我无法使用普通的 android 形状创建相同的外观(我有圆角的想法)。
解决方案
用自定义视图解决了它。它将绘制一个用给定颜色填充的矩形。之后,将清除一个椭圆形。
我将发布一个最小化的代码(没有自定义属性等),也许有一天它会帮助某人:
public class InvertedCircleView extends View {
private Paint mPaint;
private float mCanvasCenterX;
private float mCenterCircleWidth, mCenterCircleHeight;
public InvertedCircleView(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
@Override
public void onDraw(Canvas canvas) {
super.onDraw(canvas);
mPaint.setColor(getResources().getColor(android.R.color.holo_green_dark));
mPaint.setStyle(Paint.Style.FILL);
canvas.drawPaint(mPaint);
mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
mCenterCircleWidth = canvas.getWidth();
mCenterCircleHeight = canvas.getHeight();
mCanvasCenterX = canvas.getWidth() / 2;
canvas.drawOval(mCanvasCenterX - (mCenterCircleWidth / 2),
-mCenterCircleHeight,
mCanvasCenterX + (mCenterCircleWidth / 2),
mCenterCircleHeight,
mPaint);
}
}
推荐阅读
- javascript - 如何将两个或多个包含多个对象的数组合并为一个并增加它们的 ID?
- python - csv排序和删除python
- python - python:循环遍历Excel中的索引并用字符串替换
- angular - Angular 7 - 从 Angular 组件生成 URL
- c# - C# 按时间更改表行类
- rest - OAuth2 用于 REST API,紧耦合 SPA 作为唯一客户端
- python - 在 Jupyter 中写入目录权限
- python - 有没有办法使用 Wand(ImageMagick Python 绑定)修剪透明区域?
- bootstrap-4 - 如何更改 bootstrap 4.1 scrollspy(moving) 活动链接颜色?
- javascript - 代码荧光笔在羽毛笔编辑器中不起作用