2016-05-10 2 views
1

私は長い間この問題を抱えています。私はそれを残してそれに戻ってきましたが、これまで私は解決策を見つけることができませんでした。問題はシンプルですが、私は垂直方向のシークバーがあり、プログラムに触れずにプログラムを更新したいのですが、それは起こりません。これは私の垂直シークバーコード垂直方向のシークバーをプログラムで更新できません(手を触れることなく)

public class VerticalSeekBar extends SeekBar { 

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

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

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

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

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

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

     super.onDraw(c); 
    } 

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

     switch (event.getAction()) { 
      case MotionEvent.ACTION_DOWN: 
      case MotionEvent.ACTION_MOVE: 
      case MotionEvent.ACTION_UP: 
       setProgress(getMax() - (int) (getMax() * event.getY()/getHeight())); 
       onSizeChanged(getWidth(), getHeight(), 0, 0); 
       break; 

      case MotionEvent.ACTION_CANCEL: 
       break; 
     } 
     return true; 
    } 
} 

これは、シークバーは、XML

<com.gnr.kumar.varun.songapp.views.VerticalSeekBar 
       android:id="@+id/slider_1" 
       android:layout_width="wrap_content" 
       android:layout_height="200dp" 
       android:max="100" 
       android:padding="10dp" 
       android:progress="50" 
       android:progressBackgroundTint="#9cf2ec" 
       android:progressTint="#9cf2ec" 
       android:thumb="@drawable/thumb" /> 

で宣言されているどのように私は

SeekBar sliders[] = new SeekBar[NUM_OF_SLIDERS]; 

sliders[0] = (SeekBar) findViewById(R.id.slider_1); 

sliders[0].setProgress(100); 

ようなことをしようとされた。しかし、それだけでシークバーの位置を変更しています実際にはその最大値にあるべきであるときには、0よりわずかに大きい。私が100の代わりにどれだけ大きな数を使用しても、それは同じです。誰か助けてもらえますか?前もって感謝します !!!

+0

あなたのキャンバスを回転させてみてください。私はあなたのonSizeChanged/onMeasure呼び出しの寸法を逆にすることが問題になると思います。 – zgc7009

+0

@ zgc7009入力のためのThnx、私は今日それを最後に解決しました。 – varunkr

+0

恐ろしい!将来的に他の人のためにあなたの答えを投稿できるのであれば、 – zgc7009

答えて

0

私は長い間、私の問題を最終的に解決することができました。私がしなければならなかったのは、Vertical Seekbarクラスでこれをオーバーライドすることでした。受け入れられた回答の回答はthisの質問に役立ちました。

@Override public synchronized void setProgress(int progress){   
    super.setProgress(progress); 
    onSizeChanged(getWidth(), getHeight(), 0, 0); 
} 
関連する問題