100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > Android自定义进度条拖动 Android之ProgressBar(进度条)和SeekBar(拖动条)

Android自定义进度条拖动 Android之ProgressBar(进度条)和SeekBar(拖动条)

时间:2023-12-21 09:21:29

相关推荐

Android自定义进度条拖动 Android之ProgressBar(进度条)和SeekBar(拖动条)

本节引言:

本节给大家带来的是Android基本UI控件中的ProgressBar(进度条)和SeekBar(拖动条),ProgressBar的应用场景很多,比如 用户登录时,后台在发请求,以及等待服务器返回信息,这个时候会用到进度条;或者当在进行一些比较 耗时的操作,需要等待一段较长的时间,这个时候如果没有提示,用户可能会以为程序Carsh或者手机死机 了,这样会大大降低用户体验,所以在需要进行耗时操作的地方,添加上进度条,让用户知道当前的程序 在执行中,也可以直观的告诉用户当前任务的执行进度等!

而SeekBar,相信大家对他并不陌生,最常见的 地方就是音乐播放器或者视频播放器了,音量控制或者播放进度控制,都用到了这个SeekBar

1.ProgressBar

从官方文档,我们看到了这样一个类关系图:

ProgressBar继承与View类,直接子类有AbsSeekBar和ContentLoadingProgressBar, 其中AbsSeekBar的子类有SeekBar和RatingBar,可见这二者也是基于ProgressBar实现的

常用属性详解:

android:max:进度条的最大值

android:progress:进度条已完成进度值

android:progressDrawable:设置轨道对应的Drawable对象

android:indeterminate:如果设置成true,则进度条不精确显示进度

android:indeterminateDrawable:设置不显示进度的进度条的Drawable对象

android:indeterminateDuration:设置不精确显示进度的持续时间

android:secondaryProgress:二级进度条,类似于视频播放的一条是当前播放进度,一条是缓冲进度,前者通过progress属性进行设置!

对应的再Java中我们可调用下述方法:

getMax():返回这个进度条的范围的上限

getProgress():返回进度

getSecondaryProgress():返回次要进度

incrementProgressBy(int diff):指定增加的进度

isIndeterminate():指示进度条是否在不确定模式下

setIndeterminate(boolean indeterminate):设置不确定模式下

style样式

长形进度条

style="?android:attr/progressBarStyleHorizontal"

标题型圆形ProgressBar

style="?android:attr/progressBarStyleSmallTitle"

小号圆形ProgressBar

style="?android:attr/progressBarStyleSmall

超大号圆形ProgressBa

style="?android:attr/progressBarStyleLarge"

接下来来看看系统提供的默认的进度条的例子吧!

系统默认进度条使用实例:

运行效果图:

实现布局代码:

xmlns:tools="/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context=".MainActivity">

style="@android:style/Widget.ProgressBar.Small"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

style="@android:style/Widget.ProgressBar.Large"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

style="@android:style/Widget.ProgressBar.Horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:max="100"

android:progress="18" />

style="@android:style/Widget.ProgressBar.Horizontal"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_marginTop="10dp"

android:indeterminate="true" />

2.SeekBar

嘿嘿,这玩意是ProgressBar的子类耶,也就是ProgressBar的属性都可以用咯! 而且他还有一个自己的属性就是:android:thumb,就是允许我们自定义滑块~ 好的,开始本节内容!

2.1.SeekBar基本用法

好吧,基本用法其实很简单,常用的属性无非就下面这几个常用的属性,Java代码里只要setXxx即可:

android:max="100" //滑动条的最大值

android:progress="60" //滑动条的当前值

android:secondaryProgress="70" //二级滑动条的进度

android:thumb = "@mipmap/sb_icon" //滑块的drawable

接着要说下SeekBar的事件了,SeekBar.OnSeekBarChangeListener 我们只需重写三个对应的方法:

onProgressChanged:进度发生改变时会触发

onStartTrackingTouch:按住SeekBar时会触发

onStopTrackingTouch:放开SeekBar时触发

简单的代码示例:

效果图:

实现代码:

public class MainActivity extends AppCompatActivity {

private SeekBar sb_normal;

private TextView txt_cur;

private Context mContext;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mContext = MainActivity.this;

bindViews();

}

private void bindViews() {

sb_normal = (SeekBar) findViewById(R.id.sb_normal);

txt_cur = (TextView) findViewById(R.id.txt_cur);

sb_normal.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {

@Override

public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {

txt_cur.setText("当前进度值:" + progress + " / 100 ");

}

@Override

public void onStartTrackingTouch(SeekBar seekBar) {

Toast.makeText(mContext, "触碰SeekBar", Toast.LENGTH_SHORT).show();

}

@Override

public void onStopTrackingTouch(SeekBar seekBar) {

Toast.makeText(mContext, "放开SeekBar", Toast.LENGTH_SHORT).show();

}

});

}

}

2.2 图片资源自定义SeekBar

1)导入滑动块图片(scrubber.png scrubber_focus.png),进度条就直接xml绘制

scrubber_selector.xml

2) seekbar_layer.xml(进度条绘制)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。