带宽的冲击环形状

时间:2016-01-29 08:59:46

标签: android shape

我有自定义进度条形状......我想要背景(用灰色填充)来制作描边,iner和外部笔划,它们之间有9dp的间隙...... 似乎我无法让它发挥作用。

这是进度条内圈的原始XML。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
    <item android:id="@android:id/progress">
        <shape
            android:innerRadius="60dp"
            android:shape="ring"
            android:thickness="9dp"
            android:useLevel="true">


        <gradient
            android:startColor="@color/light_gray"
            android:endColor="@color/light_gray"
            android:type="sweep" />

        </shape>

    </item>
</layer-list>

这是输出的屏幕截图: Progress Bar

还有一个问题(我不想再打开另一个问题): - 我可以将这个橙色的末端变成椭圆形(圆形)吗?就像大多数进度条一样? XML与顶级XML相同,只是颜色不同。

编辑:这可能会有所帮助,我使用自定义背景的进度条组件。

EDIT2 :我通过在60和thicknesson 1dp上设置圆半径,并创建另一个具有69半径和1dp厚度的背景的ProgressBar组件来完成。

我在设计中得到了我需要的东西,这不是好方法。我可以在第二个问题上获得帮助吗?

2 个答案:

答案 0 :(得分:0)

请参阅以下代码以创建进度条

<?xml version="1.0" encoding="utf-8"?>
<rotate xmlns:android="http://schemas.android.com/apk/res/android"
    android:pivotX="50%" android:pivotY="50%" android:fromDegrees="0"
    android:toDegrees="360">
    <shape android:shape="ring" android:innerRadiusRatio="3"
        android:thicknessRatio="8" android:useLevel="false">

        <size android:width="76dip" android:height="76dip" />
        <gradient android:type="sweep" android:useLevel="false"
            android:startColor="@android:color/transparent"
            android:endColor="#00FF00"
            android:angle="0"
            />
    </shape>
</rotate>  

并且有外观和感觉,请参阅https://pankajchunchun.wordpress.com/2011/09/10/customization-of-spinner-progress/

答案 1 :(得分:0)

我认为最好的方法是使用自定义视图。使用这种方法,您可以绘制圆形帽环:

int border = 4; // This value is in PX!
RectF rect = new RectF();
Paint paint = new Paint();
int radius = getMeasuredWidth() - border/2;

rect.set(border/2, border/2, radius, radius);
paint.setStrokeWidth(border);
paint.setAntiAlias(true);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.Orange);
canvas.drawArc(rect, -90, 360, true, paint);

然后你可以在里面画另一个圆圈或另一个圆圈作为背景。希望它有所帮助!