2011-07-01 4 views
7

SeekBar을 두 모드 사이에서 토글하여 스트리밍 미디어의 상태를 표시하려고합니다.Horizontal ProgressBar : 확정 및 불확정 사이에서 전환

나는 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> 

example

setIndeterminate(true)를 호출하여 전환하려고 할 때의 드로어 블이 안되는 문제 제대로 바뀌는 것처럼 보입니다. indeterminate-> determinate의 경우, 애니메이션은 멈추고 determinate-> indeterminate에서 아무 일도 일어나지 않습니다.

내가 뭘 잘못하고 있니?

답변

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 ... 좋은 볼 사용, 다른 해결 방법이 가능할 수도 있지만 나는 이것이 가장 큰 문제라고 생각합니다 (버그?).

0

대신 pd를 불확정으로 설정하면 배경이 전환됩니다. 드로어 블 애니메이션을 원하면 여기에서 TransitionDrawable을 살펴 보시기 바랍니다 : TransitionDrawable. 그래서 실제로는 2 개의 다른 드로어 블을 추가하고 트랜지션을 애니메이션화하는 것입니다. 나는 그것이 귀하의 경우에 효과가 있다고 생각합니다. 하지만 진도 대화 상자에서 이와 같은 일을하는 경험이 없기 때문에 실제로는 알 수 없습니다.

+0

안녕하세요, 감사

때마다 당신은 설정하려는. 그건 내가 할 일이 아니야. 지저분한 해킹처럼 보입니다. 배경이 위 그림의 검은 색 영역이므로 배경 설정이 작동하지 않습니다. 막대 자체의 유휴 상태 드로어 블을 드로잉 드로잉으로 바꾸는 것은 효과적 일지 모르지만 1 차 및 2 차 진행을 0으로 설정 한 다음 트랜지션 드로어 블을 트리거해야합니다. 불필요하게 복잡합니다. 만약 내가해야만한다면, 두 개의 탐색 바를 사용하고 뷰 파기를 할 수도 있습니다. –

+0

글쎄, 배경이 실제로 진행률 표시 줄 스타일, 예 기본 및 보조 진행 드로어 블을 변경하는 것을 의미합니다. 당신은 그 dinamically 당신이 무엇을 필요에 따라 dinamically 설정할 수 있습니다 그리고 전환 드로어 블 내가 생각하는 것보다 더 좋은 방법은 viewflipper, 그리고 그런 drawable 리소스를 만들기 위해 코드의 10 개 이상의 라인이 필요하지 않습니다 생각합니다. 그것은 정말로 복잡합니다. 그 certanly 2 진도 표시 줄보다 쉽게 ​​추적 할 수 있습니다. – DArkO

+0

그래, 그냥 시도하고 작동하지 않습니다.progressdrawable은 실제로 레이어 목록이므로 전환 드로잉 가능으로 감싸 졌을 때 하위 드로어 블은 진행 표시 줄에 노출되지 않습니다. 기본 드로어 블만 채우게됩니다. 같은 이유로, 불확정 드로어 블은 움직이지 않습니다. –

2

나는 동일한 문제가 있었고 postInvalidate()를 호출하여 뷰를 강제로 새로 고침으로써 해결했습니다. Android 2.3.4를 사용 중입니다.

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

사실 해결책은 실제로 매우 간단합니다. 애니메이션 드로우 블을 시작하는 데 사용하는 것과 동일한 트릭입니다. 이 문제는 Android 2.3 (Android의 이전 버전 일 수도 있음)에만 영향을 미치는 것으로 보입니다. 대신 코드의

progressBar.setIndeterminate(true); 

사용이 부분 : 답장을

this.progressBar.post(new Runnable() 
{ 
    @Override 
    public void run() 
    { 
     progressBar.setIndeterminate(true); 
    } 
}); 
관련 문제