zoukankan      html  css  js  c++  java
  • Android 拖动条/滑动条控件、星级评分控件

    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文件中操作控件的属性。

  • 相关阅读:
    uva299 Train Swapping
    uva 10106 Product
    uva 340 MasterMind Hints
    uva 10115 Automatic Editing
    uva748 Exponentiation
    uva152 Tree's a Crowd
    uva 10420 List of Conquests
    uva 644 Immediate Decodability
    要知其所以然的学习(转载)
    持有书籍统计
  • 原文地址:https://www.cnblogs.com/chy18883701161/p/10883908.html
Copyright © 2011-2022 走看看