SeekBar小demo

来源:互联网 发布:手机数据恢复精灵 编辑:程序博客网 时间:2024/06/05 21:05

概述:

Android中组件有很多种,其中SeekBar就是其中经常见到的组件之一。SeekBar是滑动条组件,在音视频的播放器的下面经常看到。也就是settings下的sound&notification

一些属性值:

·android:max 设置范围最大值
·android:progress 设置当前进度值
·android:secondaryProgress 设置当前次进度值
·android:progressDrawable 设置进度条的图片
·android:thumb 设置进度条的滑块的图片

常用的方法:

·getMax() 获取最大范围值 eg:seekbar.getMax();
·getProgress() 获取当前进度值 eg:seekbar.getProgress();
·setMax(int) 设置范围最大值 eg:seekbar.setMax();
·setOnSeekBarChangeListener(SeekBar.OnSeekBarChangeListener l)。监听器 eg:seekbar.setOnSeekBarChangeListener();

SeekBar.OnSeekBarChangeListener中可以监听三种事件:
数值的改变(onProgressChanged)
开始拖动(onStartTrackingTouch)
停止拖动(onStopTrackingTouch)

下面是小demo实现:

1)首先是布局文件activity_main:

<?xml version="1.0" encoding="utf-8"?><ScrollView xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent" >    <LinearLayout        android:layout_width="match_parent"        android:layout_height="match_parent"        android:orientation="vertical" >        <TextView            android:id="@+id/seekbar_tetview_one"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="自定义SeekBar" />        <TextView            android:id="@+id/seekbar_tetview_two"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:text="拖动SeekBar时,信息提示" />        <!-- // android:layout_centerInparent 相对于父元素完全居中 -->        <SeekBar            android:id="@+id/seekBar"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:layout_centerInParent="true"            android:max="100" //设置范围最大值             android:progress="30"  //设置当前进度值             android:maxHeight="20px"            android:minHeight="5px"            android:paddingLeft="20px"            android:paddingRight="20px"            android:progressDrawable="@drawable/seekbar_style" //用@drawable            />    </LinearLayout></ScrollView>

2)seekbar_style.xml:
在res/drawable下定义seekbar_style.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:        android:drawable="@color/yellow_color"/>    <item        android:id="@android:id/progress"        android:drawable="@color/pink_color"/>    <item        android:id="@android:id/secondProgress"        android:drawable="@color/pink_color"/></layer-list>

3)在res/values/下定义colors.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <color name="yellow_color">#ffc559</color>    <color name="pink_color">#ff5a9d</color>    <color name="blue_color">#0173d6</color></resources>

2)然后就是MainActivity.java了:

package com.example.seekbartest;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.widget.SeekBar;import android.widget.SeekBar.OnSeekBarChangeListener;import android.widget.TextView;public class MainActivity extends Activity {    private TextView textviewOne;    private TextView textviewTwo;    private SeekBar seekBar;    private String RESULT;    private int MSG_WHAT = 0;    private String TAG = "MainActivity";    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        textviewOne = (TextView) findViewById(R.id.seekbar_tetview_one);        textviewTwo = (TextView) findViewById(R.id.seekbar_tetview_two);        seekBar = (SeekBar) findViewById(R.id.seekBar);        seekBar.setOnSeekBarChangeListener(mSeekBarChangeListener);    }    private OnSeekBarChangeListener mSeekBarChangeListener = new OnSeekBarChangeListener() {        @Override        public void onProgressChanged(SeekBar seekbar, int progress, boolean fromUser) {            Log.d(TAG, "onProgressChanged");            textviewTwo.setText("进度条正在改变,还没有停止调节");            Message msg = new Message();            Bundle bundle = new Bundle();            int pro = seekbar.getProgress();            int proMax = seekbar.getMax();            int result = pro/proMax;            bundle.putInt(RESULT, result);            msg.setData(bundle);            msg.what = MSG_WHAT;            mHandler.sendMessage(msg);        }        public void startSample() {            textviewTwo.setText("2 进度条开始改变");            //postStartSample();        }        public void stopSample() {            textviewTwo.setText("2 已停止条件进度条");            //postStopSample();        }        @Override        public void onStartTrackingTouch(SeekBar seekbar) {            Log.d(TAG, "onStartTrackingTouch");            textviewTwo.setText("进度条开始改变");//注意这个是touch,得是触屏的才会调用        }        @Override        public void onStopTrackingTouch(SeekBar seekbar) {            Log.d(TAG, "onStopTrackingTouch");            textviewTwo.setText("已停止条件进度条");        }    };    Handler mHandler = new Handler() {        @Override        public void handleMessage(Message msg) {            if (msg.what == MSG_WHAT) {                textviewOne.setText("当前拖动位置占 : " + msg.getData().getInt(RESULT)) ;            }        };    };}

輸出log:

01-01 01:12:58.021 MainActivity: onStartTrackingTouch
01-01 01:12:58.021 MainActivity: onProgressChanged
01-01 01:12:58.037 MainActivity: onProgressChanged
01-01 01:12:58.502 MainActivity: onStopTrackingTouch

效果图:

这里写图片描述

0 0
原创粉丝点击