Android SeekBar

什么是SeekBar控件,SeekBar控件其实就是一个高级点的进度条,就像咱们在听歌,看电影用的播放器上的进度条同样,是能够拖动的,能够改变进度的一个进度条控件!就是下面这个样子java

seekbar对应的方法和属性android

android:thumb---seekbar上绘制的thumb(可拖动的那个图标)

public void setOnSeekBarChangeListener (SeekBar.OnSeekBarChangeListener l)

//设置一个监听器以接受seekbar进度改变时的通知。同时提供用户在SeekBar上开始和中止触摸手势时的通知。

//参数 l        SeekBar的通知监听对象

//参见     SeekBar.OnSeekBarChangeListener

1.在res/layout目录下定义一个布局文件seekbar.xmlweb

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <LinearLayout 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
         android:orientation="vertical"
        >
			<TextView 
			    android:id="@+id/text"
			    android:layout_width="fill_parent" 
			    android:layout_height="wrap_content" 
			    android:text="我是SeekBar=进度为:"
			    android:lines="2"
			    android:textColor="#11ddff"
			   />
			<SeekBar 
			     android:id="@+id/seekbar_btn_id"
				 android:layout_width="fill_parent"
				 android:layout_height="wrap_content"
			 />
			<ImageView 
			    android:id="@+id/seekbar_imageview_id"
			    android:layout_width="fill_parent" 
			    android:layout_height="wrap_content" 
			    android:src="@drawable/gallery_01"
			    android:lines="6"
			    android:textColor="#11ddff"
			    />
			<LinearLayout 
			        android:layout_width="fill_parent"
			        android:layout_height="fill_parent"
			         android:orientation="horizontal">
				    <TextView 
				       android:layout_width="wrap_content" 
					    android:layout_height="wrap_content"
					    android:text="拖到切换图片"
				        />
				    <SeekBar 
				     android:id="@+id/seekbar_hand_id"
					 android:layout_width="fill_parent"
					 android:layout_height="wrap_content"
				     />
			 </LinearLayout>
			 <LinearLayout 
			        android:layout_width="fill_parent"
			        android:layout_height="fill_parent"
			         android:orientation="horizontal">
					   <TextView 
					    android:id="@+id/seekbar_liang_id"
					    android:layout_width="wrap_content" 
					    android:layout_height="wrap_content" 
					    android:text="改变屏幕亮度"
					    android:textColor="#11ddff"
					   />
						<SeekBar 
						     android:id="@+id/seekbar_hang_id1"
							 android:layout_width="fill_parent"
							 android:layout_height="wrap_content"
						 />
             </LinearLayout>
      </LinearLayout>
</ScrollView>

2.代码文件SeekBarDemo.java以下:app

 

package com.test;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.text.method.ScrollingMovementMethod;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.TextView;

public class SeekBarDemo extends Activity {
	
	private SeekBar  seekBar,seekBar2,seekBar3;
	private TextView textview,textview2;
	private  ImageView  imageView;
	//标记是否须要刷新
	private boolean flag=true;
	private Handler hangler=new Handler();
	////
	private  int []  arrayImage =new int[]{R.drawable.gallery_01,
			R.drawable.gallery_02,R.drawable.gallery_03,R.drawable.gallery_04,R.drawable.gallery_05,R.drawable.gallery_06};
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.seekbar);
		
		seekBar=(SeekBar)findViewById(R.id.seekbar_btn_id);
		seekBar2=(SeekBar)findViewById(R.id.seekbar_hand_id);//第二个
		seekBar2=(SeekBar)findViewById(R.id.seekbar_hand_id);//第二个
		seekBar3=(SeekBar)findViewById(R.id.seekbar_hang_id1);//第san个
		textview=(TextView)findViewById(R.id.text);
		//设置拖动条的最大值,其将为该拖动条显示的基数
		seekBar.setMax(100);
		//为该方法seekbar注册一个监听,当seekbar发生改变时调用1中的对应方法
		seekBar.setOnSeekBarChangeListener(onSeekbar);
		imageView = (ImageView)findViewById(R.id.seekbar_imageview_id);
		refresh();
		///////
		 this.seekBar2.setMax(arrayImage.length);
		this.seekBar3.setMax(100);
		this.seekBar2.setOnSeekBarChangeListener(seekbar);
		this.seekBar3.setOnSeekBarChangeListener(seekbar);
	}
	//第二个seekBar
	private  OnSeekBarChangeListener  seekbar = new OnSeekBarChangeListener() {
		
		@Override
		public void onStopTrackingTouch(SeekBar seekBar) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onStartTrackingTouch(SeekBar seekBar) {
			// TODO Auto-generated method stub
			
		}
		
		@Override
		public void onProgressChanged(SeekBar seekBar, int progress,
				boolean fromUser) {
			// TODO Auto-generated method stub
			if(seekBar.getId()==R.id.seekbar_hand_id)
			{
				imageView.setImageResource(arrayImage[seekBar2.getProgress()]);
			}
			if(seekBar.getId()==R.id.seekbar_hang_id1)
			{
				setScreenBrightness((float) seekBar
						.getProgress() / 100);
			}
		
			
		}
	};
	//表示屏幕亮度的方法
	private void setScreenBrightness(float num) {	// 0 ~ 1表示亮度
		WindowManager.LayoutParams layoutParams = super.getWindow().getAttributes() ;	// 取得屏幕的属性
		layoutParams.screenBrightness = num ;	// 设置屏幕亮度
		super.getWindow().setAttributes(layoutParams) ;	// 从新设置窗口的属性
	}
	//第一个sekbar
	private  OnSeekBarChangeListener  onSeekbar=new OnSeekBarChangeListener() {
		
		@Override
		//当游标移动中止的时候调用该方法
		public void onStopTrackingTouch(SeekBar seekBar) {
		//设置标记为须要刷新
			flag=true;
	   //建立时就开始自动更新该拖动条
			refresh();
		}
		
		
		@Override
		//当游标开始移动时调用该方法
		public void onStartTrackingTouch(SeekBar seekBar) {
		//中止刷新
			flag=false;
		}
		
		@Override
		//当进度条游标被改变或者进度条改变时调用该方法
		public void onProgressChanged(SeekBar seekBar, int progress,
				boolean fromUser) {
			//更改textView的内容
			textview.setText("进度为:"+progress+"%");
			
		}
		
	};
	//该方法自动更新该拖动条
	private void refresh() {
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				// TODO Auto-generated method stub
				//当进度不到1000,就更新status
				while(flag && seekBar.getProgress()<100)
				{
					try {
						//暂停1秒
						Thread.sleep(1000);
					} catch (InterruptedException e) {
						// TODO: handle exception
						e.printStackTrace();
					}
					//将一个Runnable对象添加到消息队列当中,
					//而且当执行到该对象时执行run()方法
					hangler.post(new Runnable() {
						
						@Override
						public void run() {
							// 从新设置进度条当前的值
							seekBar.setProgress(seekBar.getProgress()+1);
							
						}
					});
				}
			}
		}).start();
       }
}

 三:执行效果以下:ide

 

相关文章
相关标签/搜索