Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 清除圆形进度条中的可绘制进度_Java_Android - Fatal编程技术网

Java 清除圆形进度条中的可绘制进度

Java 清除圆形进度条中的可绘制进度,java,android,Java,Android,我已经创建了一个圆形进度条,随着任务的进行,它将填充圆形进度条。但是,我不想填充,而是想抹掉圆圈。我不知道该怎么做 这是我的密码: RingDrawable.java: public class RingDrawable extends GradientDrawable { private Class<?> mGradientState; public RingDrawable() { this(Orientation.TOP_BOTTOM, null); } publ

我已经创建了一个圆形进度条,随着任务的进行,它将填充圆形进度条。但是,我不想填充,而是想抹掉圆圈。我不知道该怎么做

这是我的密码:

RingDrawable.java:

public class RingDrawable extends GradientDrawable {

private Class<?> mGradientState;

public RingDrawable() {
    this(Orientation.TOP_BOTTOM, null);
}

public RingDrawable(int innerRadius, int thickness, float innerRadiusRatio, float thicknessRatio) {
    this(Orientation.TOP_BOTTOM, null, innerRadius, thickness, innerRadiusRatio, thicknessRatio);
}

public RingDrawable(GradientDrawable.Orientation orientation, int[] colors) {
    super(orientation, colors);
    setShape(RING);
}

public RingDrawable(GradientDrawable.Orientation orientation, int[] colors, int innerRadius, int thickness, float innerRadiusRatio, float thicknessRatio) {
    this(orientation, colors);
    try {
        setInnerRadius(innerRadius);
        setThickness(thickness);
        setInnerRadiusRatio(innerRadiusRatio);
        setThicknessRatio(thicknessRatio);
    } catch (Exception e) {
        // fail silently - change to your own liking
        e.printStackTrace();
    }
}

public void setInnerRadius(int radius) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
    if (mGradientState == null) mGradientState = resolveGradientState();
    Field innerRadius = resolveField(mGradientState, "mInnerRadius");
    innerRadius.setInt(getConstantState(), radius);
}

public void setThickness(int thicknessValue) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
    if (mGradientState == null) mGradientState = resolveGradientState();
    Field thickness = resolveField(mGradientState, "mThickness");
    thickness.setInt(getConstantState(), thicknessValue);
}

public void setInnerRadiusRatio(float ratio) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
    if (mGradientState == null) mGradientState = resolveGradientState();
    Field innerRadiusRatio = resolveField(mGradientState, "mInnerRadiusRatio");
    innerRadiusRatio.setFloat(getConstantState(), ratio);
}

public void setThicknessRatio(float ratio) throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
    if (mGradientState == null) mGradientState = resolveGradientState();
    Field thicknessRatio = resolveField(mGradientState, "mThicknessRatio");
    thicknessRatio.setFloat(getConstantState(), ratio);
}

private Class<?> resolveGradientState() {
    Class<?>[] classes = GradientDrawable.class.getDeclaredClasses();
    for (Class<?> singleClass : classes) {
        if (singleClass.getSimpleName().equals("GradientState")) return singleClass;
    }
    throw new RuntimeException("GradientState could not be found in current GradientDrawable implementation");
}

private Field resolveField(Class<?> source, String fieldName) throws SecurityException, NoSuchFieldException {
    Field field = source.getDeclaredField(fieldName);
    field.setAccessible(true);
    return field;
}

}
更新方法:

public void update(long elapsedTime) {
    //update the buttons states
    mProgressBar.setProgress((int)(elapsedTime/1000));
    mProgressBar.invalidate();
}

我发现创建自己的drawable更容易,只需对圆弧进行draw调用即可更改每次更新的角度,并将其附加到ImageView

public void update(long elapsedTime) {
    //update the buttons states
    mProgressBar.setProgress((int)(elapsedTime/1000));
    mProgressBar.invalidate();
}