欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

拖动条/滑动条控件、星级评分控件

程序员文章站 2022-04-14 15:29:42
ProgressBar有2个子控件: SeekBar 拖动条控件 RatingBar 星级评分控件 1、拖动条控件 也可以使用自定义的滑块: 说明: 并不会自动显示对应的刻度值。 滑块可以滑动,但没有事件响应。需要我们在.java文件中添加事件监听: 滑动滑块一次触发的事件: 最先开始时触发 onS ......

 

progressbar有2个子控件:

seekbar   拖动条控件

ratingbar   星级评分控件

 

 

1、拖动条控件

拖动条/滑动条控件、星级评分控件

1 <seekbar
2                 android:layout_width="300dp"
3                 android:layout_height="wrap_content"
4                 android:id="@+id/seekbar"
5                 android:min="0"
6                 android:max="100"
7                 android:progress="50" />   <!--滑块默认位置-->

 

 

也可以使用自定义的滑块:

拖动条/滑动条控件、星级评分控件

1  <seekbar
2         android:layout_width="300dp"
3         android:layout_height="100dp"
4         android:id="@+id/seekbar"
5         android:thumb="@drawable/a"   <!--使用自定义的图片作为滑块-->
6         android:min="0"
7         android:max="100"
8         android:progress="50" />

 

说明:

并不会自动显示对应的刻度值。

滑块可以滑动,但没有事件响应。需要我们在.java文件中添加事件监听:

 

 1 seekbar myseekbar=findviewbyid(r.id.seekbar);
 2         myseekbar.setonseekbarchangelistener(new seekbar.onseekbarchangelistener() {
 3             /*
 4             三个形参:
 5             seekbar seekbar   触发此事件/监听的seekbar
 6             int progress   当前刻度值。
 7             boolean fromuser   是否为用户拖动产生的响应,这个不常用
 8             虽然settext(int x)可以设置int型的值,但这个int指的是 r.string.app_name 这样的常量值,不是整型数字。不能settext(progress)这样用,要先转换为string。
 9              */
10             
11             //滑动滑块时触发
12             @override
13             public void onprogresschanged(seekbar seekbar, int progress, boolean fromuser) {
14                 //判断改变的是否是指定的滑动条。预防当前activity对应的xml布局中有多个滑动条,如果只有一个滑动条,则不必判断
15                if (seekbar.getid()==r.id.seekbar){
16 
17                }
18             }
19 
20             //滑动开始时触发
21             @override
22             public void onstarttrackingtouch(seekbar seekbar) {
23                 if (seekbar.getid()==r.id.seekbar){
24 
25                 }
26             }
27 
28             //滑动停止时触发
29             @override
30             public void onstoptrackingtouch(seekbar seekbar) {
31                 if (seekbar.getid()==r.id.seekbar){
32 
33                 }
34             }
35         });
36     }

 

滑动滑块一次触发的事件:

最先开始时触发   onstarttrackingtouch()   ,滑动过程中一直触发   onprogresschanged(),最后停止时触发   onstoptrackingtouch()。

就是说滑动过程中会不停地触发  onprogresschanged()  。

 

 

 

 

 

2、星级评分控件

拖动条/滑动条控件、星级评分控件

1  <ratingbar
2         android:layout_width="wrap_content"
3         android:layout_height="wrap_content"
4         />

 

总共默认5颗星,初始默认选择0颗星,默认可修改,默认步长为0.5,即可以点亮半颗星。也可手动设置:

 

1 <ratingbar
2         android:layout_width="wrap_content"
3         android:layout_height="wrap_content"
4         android:id="@+id/ratingbar"
5         android:isindicator="true"   <!--是否可修改,true是不可修改,false是可修改,默认为fasle-->
6         android:numstars="7"   <!--总星数-->
7         android:rating="5"    <!--初始默认星数-->
8         android:stepsize="1" />    <!--步长-->

 

有时候只是向用户展示评分,并不需要用户评分,比如排行旁的xx指数,这时就需要设置   android:isindicator="true"    不可修改。

默认为false,可修改。

 

在.java文件中获取已点亮的星数:

1  ratingbar ratingbar=findviewbyid(r.id.ratingbar);
2         //获取已点的星数,因为步长可以为小数,所以获取到的是float
3         float rates=ratingbar.getrating();

 

 

 

 

在android中,几乎所有控件都提供了setxxx()、getxxx()方法供我们在.java文件中操作控件的属性。