2012-02-09 18 views
3

私はプレーヤーで作業しています。音量レベルを制御するためにVertical Seekbarを使用したいと思います。誰も私にシークバーを垂直に整列させる方法を教えてもらえますか?もしコードがあればそれは素晴らしいでしょう。ここでAndroidの垂直シークバー

+1

可能重複[アンドロイドの縦シークバーを作るには?](http://stackoverflow.com/questions/3333658/how-to-make-a-vertical-seekbar-in-android) – Squonk

答えて

1

私はonDrawメソッドをオーバーライドし、それを90度

VerticalSeekBarをひっくり返すことにより、垂直方向のシークバーを作りました

import android.content.Context; 
import android.graphics.Canvas; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 

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()); 
    } 

/*@Override 
    public synchronized void setProgress(int progress) // it is necessary for calling setProgress on click of a button 
    { 
     super.setProgress(progress); 
     onSizeChanged(getWidth(), getHeight(), 0, 0); 
    }*/ 

    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レイアウトでそれを使用します。

<yourPackage.name.VerticalSeekBar 
    android:id="@+id/seekBar1" 
    android:layout_width="wrap_content" 
    android:layout_height="200dp" 
    /> 

API 11以降では、垂直方向の効果のためにシークバーのXML ttributes(android:rotation="270")を使用することができます。

<SeekBar 
android:id="@+id/seekBar1" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:rotation="270"/> 
0

build.gradleするには、これらの行を追加します。

dependencies { 
    compile 'com.h6ah4i.android.widget.verticalseekbar:verticalseekbar:0.7.2' 
} 

レイアウトXML

<!-- This library requires pair of the VerticalSeekBar and VerticalSeekBarWrapper classes --> 
<com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper 
    android:layout_width="wrap_content" 
    android:layout_height="150dp"> 
    <com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBar 
     android:id="@+id/mySeekBar" 
     android:layout_width="0dp" 
     android:layout_height="0dp" 
     android:max="100" 
     android:progress="0" 
     android:splitTrack="false" 
     app:seekBarRotation="CW90" /> <!-- Rotation: CW90 or CW270 --> 
</com.h6ah4i.android.widget.verticalseekbar.VerticalSeekBarWrapper> 

Javaコード

public class TestVerticalSeekbar extends AppCompatActivity { 
    private SeekBar mseekbar = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test_vertical_seekbar); 

     mseekbar = (SeekBar) findViewById(R.id.mySeekBar); 

     mseekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 
      int progressChanged = 0; 

      public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 
       progressChanged = progress; 
      } 

      public void onStartTrackingTouch(SeekBar seekBar) { 
       // TODO Auto-generated method stub 
      } 

      public void onStopTrackingTouch(SeekBar seekBar) { 
       Toast.makeText(getApplicationContext(), "seek bar progress:" + progressChanged, 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 

}