首页 > 代码库 > 从零开始学android<SeekBar滑动组件.二十二.>

从零开始学android<SeekBar滑动组件.二十二.>

拖动条可以由用户自己进行手工的调节,例如:当用户需要调整播放器音量或者是电影的播放进度时都会使用到拖动条,SeekBar类的定义结构如下所示:
java.lang.Object
   ? android.view.View
     ? android.widget.ProgressBar
       ? android.widget.AbsSeekBar
         ? android.widget.SeekBar
常用方法
public SeekBar(Context context)
构造
创建SeekBar类的对象
public void setOnSeekBarChangeListener(
SeekBar.OnSeekBarChangeListener l)
普通
设置改变监听操作
public synchronized void setMax(int max)
普通
设置增长的最大值

public staticinterface SeekBar.OnSeekBarChangeListener{
/**
 * 开始拖动时触发操作
 * @param seekBar触发操作的SeekBar组件对象
 */
publicabstract void onStartTrackingTouch(SeekBar seekBar) ;
/**
 * @param seekBar触发操作的SeekBar组件对象
 * @param progress当前的进度值
 * @param fromUser是否为用户自己触发
 */
publicabstract void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) ;
/**
 * 停止拖动时触发操作
 * @param seekBar触发操作的SeekBar组件对象
 */
publicabstract void onStopTrackingTouch(SeekBar seekBar) ;
}


基本的使用


xml文件
<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <SeekBar
        android:max="100"
        android:progress="30"
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginTop="60dp" />

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/seekBar1"
        android:layout_below="@+id/seekBar1"
        android:layout_marginLeft="28dp"
        android:layout_marginTop="32dp"
        android:text="seek1"
        android:textAppearance="?android:attr/textAppearanceMedium" />

    <SeekBar
        android:id="@+id/seekBar2"
        android:max="100"
        android:secondaryProgress="60"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="67dp" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/seekBar2"
        android:layout_marginTop="28dp"
        android:text="seek2"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</RelativeLayout>
</span>

java文件

<span style="font-size:18px;">package com.example.seekbar;

import android.app.Activity;
import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class MainActivity extends Activity implements OnSeekBarChangeListener{
	private TextView textView1,textView2;
	private SeekBar seekBar1,seekBar2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView1=(TextView)this.findViewById(R.id.textView1);
        textView2=(TextView)this.findViewById(R.id.textView2);
        seekBar1=(SeekBar)this.findViewById(R.id.seekBar1);
        seekBar2=(SeekBar)this.findViewById(R.id.seekBar2);
        seekBar1.setOnSeekBarChangeListener(this);
        seekBar2.setOnSeekBarChangeListener(this);
    }




	@Override
	public void onProgressChanged(SeekBar seekBar, int position, boolean flag) {
		// TODO Auto-generated method stub
		if (seekBar.getId()==seekBar1.getId())
		{
			textView1.setText("当前seekbar1刻度"+position);
			
		}
		else {
			textView2.setText("当前seekbar2刻度"+position);
		}
	}


	@Override
	public void onStartTrackingTouch(SeekBar seekBar) {
		// TODO Auto-generated method stub
		if (seekBar.getId()==seekBar1.getId())
		{
			textView1.setText("开始滑动seek1");
			
		}
		else {
			textView2.setText("开始滑动seek2");
		}
	}


	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		// TODO Auto-generated method stub
		if (seekBar.getId()==seekBar1.getId())
		{
			textView1.setText("停止滑动seek1");
			
		}
		else {
			textView2.setText("停止滑动seek2");
		}
	}
    
}
</span>

效果图



使用seekbar来控制屏幕的亮度


xml文件

<span style="font-size:18px;"><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="24dp"
        android:text="调节手机亮度" />

    <SeekBar
        android:max="100"
        android:id="@+id/seekBar1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/textView1"
        android:layout_below="@+id/textView1"
        android:layout_marginTop="117dp"
        android:progress="50" />

</RelativeLayout></span>

JAVA文件


<span style="font-size:18px;">package com.example.seekbardemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.WindowManager;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;

public class MainActivity extends Activity implements OnSeekBarChangeListener {
private SeekBar myseekBar;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		myseekBar=(SeekBar)this.findViewById(R.id.seekBar1);
		myseekBar.setOnSeekBarChangeListener(this);
	}

	

	@Override
	public void onProgressChanged(SeekBar seekBar, int position, boolean flag) {
		// TODO Auto-generated method stub
	
	
	
	}
//调节亮度的方法
	private void setScreenBrightness(float num) {
		WindowManager.LayoutParams layoutParams = 
			getWindow().getAttributes();		// 取得window属性
		layoutParams.screenBrightness = num;			// num已经除以100
		super.getWindow().setAttributes(layoutParams); // 0~1之间
	}


	@Override
	public void onStartTrackingTouch(SeekBar arg0) {
		// TODO Auto-generated method stub
		
	}


//在拖动结束是使用getProgress获得当前的Progress值来设置亮度
	@Override
	public void onStopTrackingTouch(SeekBar seekBar) {
		// TODO Auto-generated method stub
		if (seekBar.getId()==myseekBar.getId()) {
//			将progress除以100并转换为float类型
			setScreenBrightness((float)seekBar.getProgress()/100);
		}
	}

}
</span>

效果图


改变后




当然,使用SeekBar组件也可以对音量进行控制,大家可以查询相关API自行尝试






下节预报:RatingBar评分组件