Android界面开发之拖动条及自定义SeekBar

来源:互联网 发布:windows 补丁清理软件 编辑:程序博客网 时间:2024/06/05 08:28

  拖动条(SeekBar)类似进度条,不同的是用户可以控制,比如,应用程序中用户可以对音效进行控制,这就可以使用拖动条SeekBar来实现。由于拖动条可以被用户控制,所以需要对其进行事件监听,这就需要实现SeekBar.OnSeekBarChangeListener接口。在SeekBar中共需要监听3个事件,分别是:数值的改在如(onProgressChanged)、开始拖动(onStartTrackingTouch)、停止拖动(onStopTrackingTouch)。在onProgressChanged中我们可以得到当前数值的大小。下面我们来看看示例的运行效果,如图所示用户正在拖动,停止调节



首先需要在布局文件中声明SeekBar,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
 
    <SeekBar android:id="@+id/seek"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="75" />
        
    <SeekBar android:id="@+id/seek2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="80" />
 
    <TextView android:id="@+id/progress1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <TextView android:id="@+id/tracking1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
        
    <TextView android:id="@+id/progress2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
 
    <TextView android:id="@+id/tracking2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" />
        
</LinearLayout>
代码中通过“android:max="100"”设置了最大值、"progress="50"“设置了当前值等属性。因此在使用时就只需要监听其事件井处理即可,处理代码如下所示:

package com.demo.app;


import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
 
public class AppTestActivity extends Activity {
    //声明SeekBar对象
    SeekBar     mSeekBar1,mSeekBar2;
    TextView    mProgressText1,mTrackingText1,mProgressText2,mTrackingText2;
    /** Called when the activity is first created.
     * author:wang
     * date:2012.7.15
     * */
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
 
        setContentView(R.layout.main);
        //取得SeekBar对象
        
        mProgressText1 =(TextView)findViewById(R.id.progress1);
        mTrackingText1 =(TextView)findViewById(R.id.tracking1);
        mProgressText2=(TextView) findViewById(R.id.progress2);
        mTrackingText2=(TextView) findViewById(R.id.tracking2);
        initSeekBar();
    }
    
    
public void initSeekBar() {
mSeekBar1 = (SeekBar) findViewById(R.id.seek);
        mSeekBar2=(SeekBar) findViewById(R.id.seek2);
        mSeekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

public void onStopTrackingTouch(SeekBar seekBar) {
mTrackingText1.setText("停止调节");

}

public void onStartTrackingTouch(SeekBar seekBar) {
mTrackingText1.setText("正在调节");

}

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
mProgressText1.setText("当前值:"+progress);

}
});
        mSeekBar2.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {

public void onStopTrackingTouch(SeekBar seekBar) {
 mTrackingText2.setText("停止调节");

}

public void onStartTrackingTouch(SeekBar seekBar) {
 mTrackingText2.setText("正在调节");

}

public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
 mProgressText2.setText("当前值:"+progress);

}
});
}


}

如果觉得默认的形式不好看,我们可以自定义样式,具体方法如下:

自定义SeekBar

xml属性

  1. <SeekBar android:id="@android:id/progress"  
  2.         style="?android:attr/progressBarStyleHorizontal"  
  3.         android:progressDrawable="@drawable/seekbar_style"     
  4.         android:thumb="@drawable/thumb"  
  5.         android:layout_width="fill_parent"  
  6.         android:layout_height="23dip"  
  7.         android:paddingLeft="25dip"  
  8.         android:paddingRight="25dip"  
                android:paddingBottom="4dip />  

其实最最关键的就是:

  1. android:progressDrawable="@drawable/seekbar_style"     
  2. android:thumb="@drawable/thumb"  
seekbar_style.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <layer-list xmlns:android="http://schemas.android.com/apk/res/android">     
  3.   
  4.    <item android:id="@android:id/background">     
  5.       <shape>     
  6.          <corners android:radius="10dip" />     
  7.          <gradient     
  8.              android:startColor="#ffffffff"  
  9.              android:centerColor="#ff000000"     
  10.              android:endColor="#ff808A87"    
  11.              android:centerY="0.45"     
  12.              android:angle="270"/>     
  13.       </shape>     
  14.    </item>     
  15.       
  16.    <item android:id="@android:id/progress">     
  17.        <clip>     
  18.           <shape>     
  19.               <corners android:radius="10dip" />     
  20.               <gradient     
  21.                   android:startColor="#ffffffff"  
  22.                   android:centerColor="#ffFFFF00"     
  23.                   android:endColor="#ffAABD00"    
  24.                   android:centerY="0.45"     
  25.                   android:angle="270"/>     
  26.           </shape>     
  27.        </clip>     
  28.    </item>     
  29.  </layer-list>   
thumb.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>     
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android">           
  3.     <!-- 按下状态 -->    
  4.     <item       
  5.         android:state_pressed="true"       
  6.         android:drawable="@drawable/xxxx" />      
  7.                 
  8.     <!-- 普通无焦点状态 -->    
  9.     <item       
  10.         android:state_focused="false"       
  11.         android:state_pressed="false"     
  12.         android:drawable="@drawable/xxx" />   
  13.   
  14. 上面的xxxx是图片   
  15. </selector> 



一、SeekBar教程篇

拖动条(SeekBar)
http://www.eoeandroid.com/thread-62309-1-1.html

自定义SeekBar的背景颜色,进度条颜色,以及滑块的图片
http://www.eoeandroid.com/thread-38866-1-1.html

Android 自定义SeekBar
http://www.eoeandroid.com/thread-70001-1-1.html

Android中SeekBar - 可拖动的进度条控件
http://www.eoeandroid.com/thread-66786-1-1.html

Android进度条(ProgressBar)拖动条(SeekBar)星级滑块(RatingBar)的例子
http://www.eoeandroid.com/thread-97899-1-1.html

Android 让你的SeekBar 也支持长按事件
http://www.eoeandroid.com/thread-32310-1-1.html

Android 音量seekbar制作
http://www.eoeandroid.com/thread-83845-1-1.html


二、SeekBar实例源码篇
竖直SeekBar源码
http://www.eoeandroid.com/thread-34269-1-1.html

Android 中文 API (18) —— AbsSeekBar
http://www.eoeandroid.com/thread-39831-1-1.html

几行代码的进度条
http://www.eoeandroid.com/thread-56616-1-1.html

Android 竖着的SeekBar
http://www.eoeandroid.com/thread-93431-1-1.html

自定义seekbar的样式
http://www.eoeandroid.com/thread-82075-1-1.html



三、SeekBar常见问题与解决篇
如何让SeekBar垂直显示?【已解决】
http://www.eoeandroid.com/thread-5355-1-1.html

请教:如何改变ProgressBar和SeekBar的进度条颜色【已解决】
http://www.eoeandroid.com/thread-5558-1-1.html

SeekBar和AbsSeekBar为什么这样设计?【已解决】
http://www.eoeandroid.com/thread-15267-1-1.html

SeekBar 疑惑,求解【已解决】
http://www.eoeandroid.com/thread-18559-1-1.html

关于SeekBar滑杆问题【已解决】
http://www.eoeandroid.com/thread-148410-1-1.html

向大家请教一个问题,关于seekbar的,请大家进来看看【已解决】
http://www.eoeandroid.com/thread-110862-1-1.html

想做个音量控制,当拖动seekbar的时候,能播放对应的声音【已解决】
http://www.eoeandroid.com/thread-166624-1-1.html

关于seekbar和thread的问题【已解决】
http://www.eoeandroid.com/thread-37756-1-1.html

android  SeekBar的一个帖子,甚是让我心烦[SeekBar特效]【已解决】
http://www.eoeandroid.com/thread-100961-1-1.html


四、SeekBar未解决问题篇

问一个关于Seekbar的问题【未解决】
http://www.eoeandroid.com/thread-170302-1-1.html

seekbar 滑动是使图片放大缩小,点击放大或缩小按钮时seekbar相应改变【未解决】
http://www.eoeandroid.com/thread-157757-1-1.html

请问这样的Seekbar如何实现?【未解决】
http://www.eoeandroid.com/thread-170186-1-1.html

求救各位达人,如何实现一个环形的seekbar,谢谢【未解决】
http://www.eoeandroid.com/thread-153134-1-1.html

SeekBar进度条显示问题【未解决】
http://www.eoeandroid.com/thread-158360-1-1.html

原创粉丝点击