API Demos 2.3 学习笔记 (13)-- Views->Seek Bar

简介:

更多精彩内容,请点击阅读:《API Demos 2.3 学习笔记》


SeekBar 是基于ProgressBar的扩展,可以理解为添加了滑动条的ProgressBar。用户可以左右移动滑动条或者左右移动轨迹球来设置当前的进度值。最好不要在SeekBar左边或者右边放置一个可以聚焦的控件。

SeekBar 控件最经典的应用是在播放器中用于显示/改变播放进度的进度条。下面是一个简单的SeekBar 控件:

	 <SeekBar android:id="@+id/seek"
       	      android:layout_width="match_parent"
       	      android:layout_height="wrap_content"
       	      android:max="100"
       	      android:progress="50"
       	      android:secondaryProgress="75" />
注:android:max="100" 属性表示该SeekBar 的最大值为100,即取值范围为0~100
android:progress="50" 属性表示当前初始的进度值为50

android:secondaryProgress="75"  属性表示当前初始的第二进度值为 75


在播放器的进度条中, android:progress常用来表示当前播放的进度,而 android:secondaryProgress则常用来表示当前音频/视频文件缓冲的进度。

SeekBar 主要通过设置监听器OnSeekBarChangeListener来响应用户点击的。具体使用方法如下:

       // 通过findViewById方法获得RatingBar对象
        SeekBar mSeekBar = (SeekBar) findViewById(R.id.seekbar);
                 
         //创建SeekBar 监听器
        mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
			
			public void onStopTrackingTouch(SeekBar seekBar) {
				// TODO 用户停止对seekbar进行触屏操作时触发响应
				
			}
			
			public void onStartTrackingTouch(SeekBar seekBar) {
				// TODO 用户开始对seekbar进行触屏操作时触发响应
				
			}
			
			public void onProgressChanged(SeekBar seekBar, int progress,
					boolean fromUser) {
				// TODO 用户移动滑动条,导致进度值改变时,触发响应
				
			}
		});
注:创建 SeekBar 监听器时,需要注意的是,3个参数以及它们对应的含义如下:
seekBar:   由于多个SeekBar可以同时指定同一个SeekBar 监听器 。该参数就是当前触发SeekBar 监听器的那一个SeekBar 对象。
progress:  当前进度值。取值范围从0到android:max属性所设定的最大值。

fromUser:  如果触发监听器的是来自用户触屏点击或轨迹球左右移动,则为true。


下面我们进行实例代码解析:

res-layout-seekbar_1.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- 一个SeekBar对象-->
    <!-- android:max="100" 表示seekbar最大值是100,即取值范围0~100-->
    <!-- android:progress="50" 表示seekbar当前进度取值是50-->
    <!-- android:secondaryProgress="75"  表示seekbar当前第二进度取值是75-->
    <SeekBar android:id="@+id/seek"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:max="100"
        android:progress="50"
        android:secondaryProgress="75" />

    <!-- 一个TextView对象,用于显示当前的progress进度值 -->
    <TextView android:id="@+id/progress"
       	android:layout_width="match_parent"
        android:layout_height="wrap_content" />
    
    <!-- 一个TextView对象,用于显示用户当前是否在对Seek Bar进行触屏操作 -->
    <TextView android:id="@+id/tracking"
       	android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>


src-com.example.android.apis.view-SeekBar1.java

package com.example.android.apis.view;

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

import com.example.android.apis.R;


/**
 * 演示如何使用seek bar
 */
public class SeekBar1 extends Activity implements SeekBar.OnSeekBarChangeListener {
    
    SeekBar mSeekBar;
    TextView mProgressText;
    TextView mTrackingText;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.seekbar_1);
        
        // 通过findViewById方法获得一个SeekBar对象和两个用于提示作用的TextView
        mSeekBar = (SeekBar)findViewById(R.id.seek);
        mSeekBar.setOnSeekBarChangeListener(this); //设置Seek Bar监听器
        mProgressText = (TextView)findViewById(R.id.progress);
        mTrackingText = (TextView)findViewById(R.id.tracking);
    }

    //当用户用手移动滑动条,改变进度值时,触发该响应。progress表示当前进度值。
    public void onProgressChanged(SeekBar seekBar, int progress, boolean fromTouch) {
        mProgressText.setText(progress + " " + 
                getString(R.string.seekbar_from_touch) + "=" + fromTouch); 
    }

    //用户开始对SeekBar进行触屏操作时触发响应
    public void onStartTrackingTouch(SeekBar seekBar) {
        mTrackingText.setText(getString(R.string.seekbar_tracking_on));
    }

    //用户停止对SeekBar进行触屏操作时触发响应
    public void onStopTrackingTouch(SeekBar seekBar) {
        mTrackingText.setText(getString(R.string.seekbar_tracking_off));
    }
}

知识点1:关于如何自定义SeekBar的颜色,大小,图片等进阶知识,请点击阅读《SeekBar自定义(颜色,大小,图片)》


预览效果:


相关文章
|
29天前
|
XML API 数据格式
【Qt 学习笔记】QWidget的enable属性 | API的介绍
【Qt 学习笔记】QWidget的enable属性 | API的介绍
28 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动1
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动1
52 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 前后端联动3
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 前后端联动3
42 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结3
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结3
32 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结4
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结
44 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动3
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动3
47 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结2
前端学习笔记202305学习笔记第三十一天-什么是mvc-c层api 和mvc总结2
40 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
35 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动2
前端学习笔记202305学习笔记第三十天-什么是mvc-c层api 前后端联动2
41 0
|
9月前
|
前端开发 API
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2
42 0
前端学习笔记202305学习笔记第二十二天-新增修改api的封装2