【发布时间】:2019-01-08 18:31:19
【问题描述】:
要求
如何创建这样的视图。
我想在屏幕上绘制一个视图,该视图是一条分成几段的线,显示整个视图的百分比值。我的要求是
- 视图具有不同颜色的不同部分
- 视图可能没有呈现所有部分,它可能只有前 2 个或第一个和最后一个或只有一种颜色等 - 这仅在运行时知道
- 不同部分的大小仅在运行时知道,因此需要以编程方式指定
- 整个视图的左右角都是圆角的
我尝试过的想法/事情
(1)自定义视图并排渲染3个矩形
我尝试了一个自定义视图,它并排呈现 3 个矩形。但这些显然有方角。
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int viewHeight = 50;
canvas.drawrect(0, 0, 60, viewHeight, paint); // A
canvas.drawrect(60, 0, 120, viewHeight, paint); // B
canvas.drawrect(120,0, 180, viewHeight, paint); // C
}
(2) 圆角形状
我知道我可以使用 Shape 来定义一个带有圆角的矩形,但这是一种颜色。
<shape xmlns:android="http://schemas.android.com/apk/res/android">
...
<corners
android:radius="4dp" />
....
</shape>
(3) 图层列表
来自Android rectangle shape with two different color,我看到我可以使用图层列表来指定形状中的每个项目以具有不同的颜色。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size
android:width="40dp"
android:height="40dp" />
<solid android:color="#F86F05" />
</shape>
</item>
<item android:top="10dp">
<shape android:shape="rectangle">
<size
android:width="30dp"
android:height="30dp" />
<solid android:color="#B31F19" />
</shape>
</item>
</layer-list>
(4) 带角的图层列表??
我可以将“角”标签添加到整个图层列表中以获得圆角的主要角吗?我认为不是,角部分必须在“项目”的形状标签中。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<corners
android:radius="4dp" />
<item>
<shape android:shape="rectangle">
<size
android:width="40dp"
android:height="40dp" />
<solid android:color="#F86F05" />
</shape>
</item>
<item android:top="10dp">
<shape android:shape="rectangle">
<size
android:width="30dp"
android:height="30dp" />
<solid android:color="#B31F19" />
</shape>
</item>
</layer-list>
摘要
不过,这最后一个越来越接近我的要求了
- 如何以编程方式指定每个“项目”的宽度
- 如何以编程方式显示/隐藏“项目”
- 如何将最明显的“项目”顶角和最底部“项目”的底角舍入
更新:如何添加海拔/灰色边框
感谢“@0X0nosugar”的解决方案。我现在想添加一个高程或轻微的灰色边框,因为其中一种颜色是光线不足并且接近背景颜色。当我添加以下内容时,我得到一个矩形阴影,弯曲的角落看起来很糟糕。
android:elevation="2dp"
android:outlineProvider="bounds"
我希望它如下所示
【问题讨论】:
标签: android