Android SeekBar設置爲垂直的佈局

在網站找了垂直佈局的seekbar方法http://blog.csdn.net/jiahui524/article/details/8188651

自己實踐了下。在修改seekbar的背景圖片時發現得把圖片順時針傾斜90度才能把圖片完全顯示出來。

如下圖片heart7.png

圖片heart8.png:

圖片jian.png


seekbar的垂直佈局就是垂直顯示完整圖片了


OK,上菜。。

java文件

1.    VerticalSeekBar.java

import android.content.Context;
import android.graphics.Canvas;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.SeekBar;
 
public class VerticalSeekBar extends SeekBar {
 
public VerticalSeekBar(Context context) {
super(context);
}

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


   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(widthMeasureSpec, heightMeasureSpec);
  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:
          int i=0;
               i=getMax() - (int)(getMax() * event.getY() / getHeight());
               setProgress(i);
               Log.i("Progress",getProgress()+"");
               onSizeChanged(getWidth(),getHeight(), 0, 0);
               break;
           case MotionEvent.ACTION_CANCEL:
                break;
       }
       return true;
    }
}

2.    main.xml

<LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
        <cn.org.farseer.android.Phone.VerticalSeekBar
            android:id="@+id/callseek"
            android:layout_width="220dp"
            android:layout_height="60dp"            
            android:layout_margin="10dp"
            android:max="100"
            android:progress="50"
            android:progressDrawable="@drawable/seekbar_call"
            android:thumb="@drawable/thumbj"/>
    </LinearLayout>

3.     seekbar_call.xml

<?xml version="1.0" encoding="UTF-8"?>   
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">   
  
    <item android:id="@android:id/background"        
          android:drawable="@drawable/heart8">   
      
    </item>   
  
    <item android:id="@android:id/progress"
          android:drawable="@drawable/heart7">   
    </item>
    
</layer-list>    

4.    thumbj.xml

<?xml version="1.0" encoding="UTF-8"?>     
<selector xmlns:android="http://schemas.android.com/apk/res/android">           
    <!-- 按下狀態 -->    
    <item       
        android:state_pressed="true"    
        android:drawable="@drawable/jian"      
        />      
                
    <!-- 普通無焦點狀態 -->    
    <item       
        android:state_focused="false"       
        android:state_pressed="false"     
        android:drawable="@drawable/jian"  
    />   
</selector>    

在java主代碼中只要

private VerticalSeekBar volumeSeek;

即可按照正常使用SeekBar的方法即可。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章