企业网站推广网站,购物网站建设app开发,步骤英文,wordpress建站 网盘视频教程这一节要学的控件是 ProgressBar 的升级版#xff0c;对于 ProgressBar 而言只能展示进度#xff0c;而不能与用户互动#xff0c;也就是没有接收用户输入的能力。而本节要学习的 SeekBar 是一种可以“Seek”的 ProgressBar#xff0c;用户不但可以通过 SeekBar 观察到进度…这一节要学的控件是 ProgressBar 的升级版对于 ProgressBar 而言只能展示进度而不能与用户互动也就是没有接收用户输入的能力。而本节要学习的 SeekBar 是一种可以“Seek”的 ProgressBar用户不但可以通过 SeekBar 观察到进度还可以随时手动修改进度相信对此场景你一定不会陌生。没错在视频播放的场景用 SeekBar 实现在合适不过。 1. SeekBar 的特性
前面提到从功能上讲 SeekBar 是 ProgressBar 的升级版而通过观察 SeekBar 的继承关系可以发现从代码上来讲它是继承自 ProgressBar 的所以 ProgressBar 所有的功能 SeekBar 都可以直接使用另外 SeekBar 在 ProgressBar 的基础之上增加了一个可拖拽的小滑块用户可以通过拖拽随时改变当前的进度值。适用于各种带互动性质的进度相关场景比如音频、视频等。 2. SeekBar 的基本用法
SeekBar 的用法比较简单也比较直观。属性和API基本都和 ProgressBar 类似而由于需要接收用户的输入所以在 ProgressBar 的基础之上需要增加一个回调接口用来监听用户的操作。 2.1 SeekBar 常用属性
SeekBar 的属性都非常好理解当然也包含了上一节 ProgressBar 的所有属性这里挑几个常用的做一下讲解
android:max 拖拽进度条的最大值。android:progress 拖拽进度条的当前进度值。android:secondaryProgress 二级滑动条的进度值。android:thumb 拖拽滑块的样式资源默认通常是一个小圆点大多数时候我们会自定义一个更好看的样式。android:progressDrawable 自定义 SeekBar 的进度显示样式可以设置已走进度和未走进度的不同样式。示例如下编写 xml 代码设置android:progressDrawable
FrameLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentSeekBarandroid:idid/seekBarandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:max100android:progress60android:progressDrawabledrawable/seekbar_progress //FrameLayout在 drawable 资源目录了下创建“seekbar_progress.xml”文件编写图像资源
?xml version1.0 encodingutf-8?
layer-list xmlns:androidhttp://schemas.android.com/apk/res/androiditemshapegradientandroid:endColor#055CEBandroid:startColor#f00android:useLeveltrue //shape/item/layer-list这样就可以为 SeekBar 增加一个渐变的样式效果如下 2.2 SeekBar 的常用 API
getMax 获取当前 SeekBar 的最大进度值getProgress 获取当前 SeekBar 的进度值 2.3 SeekBar 回调接口
SeekBar 提供了一个回调接口专门用于处理用户的操作
SeekBar.OnSeekBarChangeListener接口中声明了 3 个方法 当 SeekBar 的进度发送变化时回调用来实时监听进度的变化。 public void onProgressChanged (SeekBar seekBar, int progresValue, boolean fromUser)参数解析 seekBar 进度变化的 SeekBar 对象progressValue 进度变化之后的进度值fromUser 是否是用户操作可用来区分进度是通过 API 变化的还是用户拖拽变化的 当进度条开始被拖拽的时候回调监听拖拽的起始事件。 public void onStartTrackingTouch(SeekBar seekBar) 参数解析seekbar 被拖拽的 SeekBar 对象 当进度条拖拽结束的时候回调用来监听拖拽结束事件。 public void onStopTrackingTouch(SeekBar seekBar)参数解析seekBar 被拖拽的 SeekBar 对象 3. SeekBar 完整示例
以上就是 SeekBar 常用的属性和 API 及回调的用法接下来我们一起通过刚刚学习的知识实现一个简单功能。首先添加一个 SeekBar 并为其添加回调接口实时监听进度变化然后通过将进度展示到 TextView 上完整的布局代码如下
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentSeekBarandroid:idid/seekBarandroid:layout_widthmatch_parentandroid:layout_heightwrap_contentandroid:layout_gravitycenterandroid:max100android:progress60android:progressDrawabledrawable/seekbar_progress /
/RelativeLayout在以上布局中我们在屏幕中央添加了一个 SeekBar 并在其下方添加了一个 TextView 用来展示 SeekBar 当前的进度。接着编写 Java 代码主要完成两个任务
获取 SeekBar 的实例注册 SeekBar 的状态监听器实时监控 SeekBar 的进度变化并通过 Toast 打印当前进度
package com.emercy.myapplication;import android.app.Activity;import android.os.Bundle;
import android.widget.SeekBar;
import android.widget.Toast;public class MainActivity extends Activity {private SeekBar seekBar;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);seekBar findViewById(R.id.seekBar);seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {Overridepublic void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {Toast.makeText(MainActivity.this, 当前进度为 progress, Toast.LENGTH_LONG).show();}Overridepublic void onStartTrackingTouch(SeekBar seekBar) {}Overridepublic void onStopTrackingTouch(SeekBar seekBar) {}});}
}通过 Toast 观察我们在拖拽的同时可以实时监听到 SeekBar 的状态效果图如下 4. 小结
本节学习了一个进度条控件可以 xml 设置其初始态、样式等属性而在使用中通过 Java Api 结合业务需求修改各个属性值达到一个类似视频进度条的 UI 样式。