14 使用SeekBar制作可拖动的进度条

14-1 使用SeekBar制作可拖动的进度条 

SeekBar
  通过滑块的位置来标识数值,而且拖动条允许用户拖动滑块来改变进度值的大小。

主要属性和方法

  setMax()——设置SeekBar的最大数值
  setProgress()——设置SeekBar当前的数值
  setSecondaryProgress()——设置SeekBar的第二数值,即当前拖动推荐的数值

使用SeekBar制作可拖动的进度条
  第一步 main.xml声明SeekBar
  第二步 MainActivity中声明和初始化SeekBar
  第三步 MainActivity中声明和初始化TextView tv1 tv2
  第四步 拖动的三种情况的设置

SeekBar的事件

  SeekBar是ProgressBar的子类;SeekBar的特殊性在于,其进度由程序和用户共同决定。SeekBar与ProgressBar最大的区别就是进度可以由用户控制。所有需要实现拖动事件的监听,监听器接口是SeekBar.OnSeekBarChangeListener,三个接口方法是

  onProgressChanged()——数值改变
  onStartTracingTouch()——开始拖动
  onStopTracingTouch()——停止拖动

--------------------------------------------------

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <SeekBar
        android:id="@+id/seekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50" />

    <TextView
        android:id="@+id/tv1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/tv2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</LinearLayout>

 

MainActivity.java

package com.example.andriod2_seekbar;

import android.app.Activity;
import android.app.ActionBar;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;
import android.os.Build;

public class MainActivity extends Activity implements OnSeekBarChangeListener{

    private SeekBar seekBar;
    private TextView tv1;
    private TextView tv2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        seekBar=(SeekBar) findViewById(R.id.seekBar);
        tv1=(TextView) findViewById(R.id.tv1);
        tv2=(TextView) findViewById(R.id.tv2);
        seekBar.setOnSeekBarChangeListener(this);
        
    
    }
    
    //数值改变
    @Override
    public void onProgressChanged(SeekBar seekBar, int progress,
            boolean fromUser) {
        // TODO Auto-generated method stub
        tv1.setText("正在拖动");
        tv2.setText("当前数值:"+progress);
    }
    
    //开始拖动
    @Override
    public void onStartTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
        tv1.setText("开始拖动");
    }
    
    //停止拖动
    @Override
    public void onStopTrackingTouch(SeekBar seekBar) {
        // TODO Auto-generated method stub
        tv1.setText("停止拖动");
    }


}

14-2 自定义SeekBar进度条

自定义SeekBar进度条样式
  android:progressDrawable="@android:drawable/seekbar_img"//改变进度条样式
  android:thumb="@android:drawable/thumb"//滑改变块样式

 <SeekBar
        android:id="@+id/seekBar"
        style="@android:style/Widget.SeekBar"[Andriod自带的,ctrl+左击]
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50" />

可得:

 <style name="Widget.SeekBar">
        <item name="android:indeterminateOnly">false</item>
        <item name="android:progressDrawable">@android:drawable/progress_horizontal</item>
        <item name="android:indeterminateDrawable">@android:drawable/progress_horizontal</item>
        <item name="android:minHeight">20dip</item>
        <item name="android:maxHeight">20dip</item>
        <item name="android:thumb">@android:drawable/seek_thumb</item>[ctrl+左击]
        <item name="android:thumbOffset">8dip</item>
        <item name="android:focusable">true</item>
        <item name="android:mirrorForRtl">true</item>
</style>

E:\adt-bundle-windows-x86-20130917\platforms\android-14\data\res\drawable

找到文件打开可得:

 

@android:drawable/seek_thumb

<?xml version="1.0" encoding="utf-8"?>
<!-- This is the thumb on the seek bar. -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:state_pressed="true"
          android:state_window_focused="true"
          android:drawable="@drawable/seek_thumb_pressed" />

    <item android:state_focused="true"
          android:state_window_focused="true"
          android:drawable="@drawable/seek_thumb_selected" />

    <item android:state_selected="true"
          android:state_window_focused="true"
          android:drawable="@drawable/seek_thumb_selected" />

    <item android:drawable="@drawable/seek_thumb_normal" />

</selector>

所以改后:

 <SeekBar
        android:id="@+id/seekBar"
        android:thumb="@drawable/my_thumb"
        style="@android:style/Widget.SeekBar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50" />

my_thumb.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/select" android:state_pressed="true" android:state_window_focused="true"/>
    <item android:drawable="@drawable/select" android:state_focused="true" android:state_window_focused="true"/>
    <item android:drawable="@drawable/select" android:state_selected="true" android:state_window_focused="true"/>
    <item android:drawable="@drawable/normal"/>
</selector>    

     

 

posted @ 2016-03-27 11:33  沉默的羊癫疯  阅读(7829)  评论(0编辑  收藏  举报