水平ProgressBar:在确定和不确定之间切换

我试图切换这两种模式之间的SeekBar来显示流媒体的状态。

我已经确定在XML中定义android:indeterminate标记时显示正确的图形:

<SeekBar
    android:id="@+id/seekBar1"
    android:indeterminate="false"
    android:progressDrawable="@android:drawable/progress_horizontal"
    android:indeterminateDrawable="@android:drawable/progress_indeterminate_horizontal"
    android:indeterminateBehavior="cycle"
    android:indeterminateOnly="false"
    android:progress="33"
    android:secondaryProgress="66"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"></SeekBar>

麻烦的是,当试图通过调用setIndeterminate(true)来切换时,drawable看起来没有正确更改。 在不确定→确定的情况下,动画停止,并且从确定 - >不确定,没有任何反应。

我究竟做错了什么?


SeekBar onSizeChanged()仅初始化当前选定的可绘制背景,并且在SeekBar初始化时调用它。 所以修正可能是:

public class CorrectedSeekBar extends SeekBar {

    public CorrectedSeekBar(Context context) {
         super(context);
    }

    public CorrectedSeekBar(Context context, AttributeSet attrs) {
         super(context, attrs);
    }

    public CorrectedSeekBar(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        boolean current = isIndeterminate();
        setIndeterminate(!current);
        super.onSizeChanged(w, h, oldw, oldh);
        setIndeterminate(current);
        super.onSizeChanged(w, h, oldw, oldh);
    }

}

并在布局xml中使用<yourpackage.CorrectedSeekBar ...

这看起来不错,其他解决方法可能是可能的,但我认为这是主要问题(错误?)。


我遇到了同样的问题,我通过调用postInvalidate()来强制刷新视图来解决它。 我在Android 2.3.4上。

// Configure the SeekBar
seekBar.setIndeterminate(true);
seekBar.postInvalidate();

相反,将pd设置为不确定只是切换其背景。 如果你想绘制动画,那么我建议在这里查看TransitionDrawable:TransitionDrawable。 所以它的使用是实际添加两个不同的drawable并为其转换创建动画。 我认为这应该适合你的情况。 但我没有经验,在进度对话框上做这样的事情,所以我真的不知道。

链接地址: http://www.djcxy.com/p/8317.html

上一篇: Horizontal ProgressBar: Toggling between determinate and indeterminate

下一篇: GPU programming strategies using CUDA