2017-10-11 121 views
0

我是自定义android默认查找栏以垂直显示并在片段中使用从用户获取一些反馈。Seek Bar活动/片段重新启动后进度未更新

第一次启动后显示正常。但是,一旦我提交了我的第一个反馈,我将重新启动包含我的自定义垂直寻找栏的片段。

那时垂直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 /进度”

。 210