2017-10-11 12 views
0

私はとカスタマイズされたアンドロイドデフォルトのシークバーを縦に表示して、断片的に使用するとユーザーからのフィードバックを受け取ります。シークバーの進行状況がアクティビティ/フラグメントの再起動後に更新されていません

最初の起動後、正しく表示されています。しかし、私が最初のフィードバックを提出すると、カスタマイズされたVertical Seek Barを含む断片でアクティビティを再開しています。

この時点で、Vertical Seekbarのサムが「0」になっていますが、進行状況が「0」に達しておらず、進行状況を示していません。 :(

私は私の垂直を追加してい以下は、私は任意のものを逃した場合、私を提案してくださいバーコードを求める。

public class VerticalSeekBar extends SeekBar { 
    private int mLastProgress = 0; 

    private OnSeekBarChangeListener mOnChangeListener; 

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

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

    public synchronized int getMaximum() { 
    return getMax(); 
    } 

    @Override 
    protected void onDraw(Canvas c) { 
    c.rotate(-90); 
    c.translate(-getHeight(), 0); 
    super.onDraw(c); 
    } 

    @Override 
    protected synchronized void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
    super.onMeasure(heightMeasureSpec, widthMeasureSpec); 
    setMeasuredDimension(getMeasuredHeight(), getMeasuredWidth()); 
    } 

    @Override 
    protected void onSizeChanged(int w, int h, int oldw, int oldh) { 
    super.onSizeChanged(h, w, oldh, oldw); 
    } 

    @Override 
    public boolean onTouchEvent(MotionEvent event) { 
    if (!isEnabled()) { 
     return false; 
    } 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
     if (mOnChangeListener != null) { 
      mOnChangeListener.onStartTrackingTouch(this); 
     } 
     setPressed(true); 
     setSelected(true); 
     break; 
     case MotionEvent.ACTION_MOVE: 
     super.onTouchEvent(event); 
     int progress = getMax() - (int) (getMax() * event.getY()/getHeight()); 

     // Ensure progress stays within boundaries 
     if (progress < 0) { 
      progress = 0; 
     } 
     if (progress > getMax()) { 
      progress = getMax(); 
     } 
     setProgress(progress); // Draw progress 
     if (progress != mLastProgress) { 
      // Only enact listener if the progress has actually changed 
      mLastProgress = progress; 
      if (mOnChangeListener != null) { 
      mOnChangeListener.onProgressChanged(this, progress, true); 
      } 
     } 

     onSizeChanged(getWidth(), getHeight(), 0, 0); 
     setPressed(true); 
     setSelected(true); 
     break; 
     case MotionEvent.ACTION_UP: 
     if (mOnChangeListener != null) { 
      mOnChangeListener.onStopTrackingTouch(this); 
     } 
     setPressed(false); 
     setSelected(false); 
     break; 
     case MotionEvent.ACTION_CANCEL: 
     super.onTouchEvent(event); 
     setPressed(false); 
     setSelected(false); 
     break; 
    } 
    return true; 
    } 

    public synchronized void setMaximum(int maximum) { 
    setMax(maximum); 
    } 

    @Override 
    public void setOnSeekBarChangeListener(OnSeekBarChangeListener onChangeListener) { 
    this.mOnChangeListener = onChangeListener; 
    } 

    public synchronized void setProgressAndThumb(int progress) { 
    setProgress(progress); 
    onSizeChanged(getWidth(), getHeight(), 0, 0); 
    if (progress != mLastProgress) { 
     mLastProgress = progress; 
     if (mOnChangeListener != null) { 
     mOnChangeListener.onProgressChanged(this, progress, true); 
     } 
    } 
    } 

    public synchronized void setMyProgress(int progress) { 
    setProgress(progress); 
    } 
} 

答えて

0

は最終的に私は私の問題の解決策を得た。 .xmlファイルでは、私が使用垂直シークバーを作成中アンドロイド:progressDrawableは= "を描画可能@シーク/" が、seek.xmlに、私は

item android:id="@android:id/secondaryProgress", 
item android:id="@android:id/background" and 

項目アンドロイドとしてタイトルを宣言するのを忘れます。id = "@アンドロイド:ID /進捗状況"。

関連する問題