7

我正在尝试SeekBar在两种模式之间切换以显示流媒体的状态。

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

<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 似乎没有正确更改。在 indeterminate->determinate 的情况下,动画停止,而从 determinate->indeterminate 则没有任何反应。

我究竟做错了什么?

4

4 回答 4

2

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

// Configure the SeekBar
seekBar.setIndeterminate(true);
seekBar.postInvalidate();
于 2011-07-20T13:40:51.930 回答
1

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 ...

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

于 2011-07-10T14:33:32.910 回答
0

解决方案实际上非常简单,您必须使用相同的技巧来启动动画可绘制对象。这个问题似乎只影响 Android 2.3(可能还有旧版本的 Android)。

每当你想设置:

progressBar.setIndeterminate(true);

改用这部分代码:

this.progressBar.post(new Runnable()
{
    @Override
    public void run()
    {
        progressBar.setIndeterminate(true);
    }
});
于 2012-08-31T09:08:26.017 回答
0

好吧,而是将 pd 设置为不确定,只需切换其背景即可。如果你想要可绘制的动画,那么我建议在这里查看 TransitionDrawable:TransitionDrawable。所以它的用途是实际添加 2 个不同的可绘制对象并为其过渡设置动画。我认为这应该适用于你的情况。但我没有在进度对话框中做这样的事情的经验,所以我真的不能说。

于 2011-07-01T14:36:10.560 回答