Android自定义评分控件的完整实例

作者:任他明月下西楼 时间:2021-10-26 19:25:58 

前言

无意中翻到几年前写过的一个RatingBar,可以拖拽,支持自定义星星图片,间距大小等参数。

Android自定义评分控件的完整实例

自定义参数

为了方便扩展,支持更多的样式,这里将大部分参数设置成支持外部可配置的形式。

<declare-styleable name="RatingBarPlus">
   <attr name="hideImageResource" format="reference"/>
   <attr name="showImageResource" format="reference"/>
   <attr name="starSpace" format="dimension"/>
   <attr name="maxStar" format="integer"/>
   <attr name="stepSize" format="float"/>
   <attr name="rating" format="float"/>
   <attr name="starWidth" format="dimension"/>
   <attr name="starHeight" format="dimension"/>
</declare-styleable>
  • hideImageResource 暗星星图片id

  • showImageResource 亮星星图片id

  • starSpace 星星间距

  • maxStar 星星最大个数

  • stepSize 评分步长,即能不能选中0.1个星

  • rating 默认评分

  • starWidth 星星宽度

  • starHeight 星星高度

解析参数

Android自定义评分控件的完整实例

创建星星位图的时候需要根据配置的大小和图片本身的宽高进行缩放。

绘制

Android自定义评分控件的完整实例

绘制完成之后我们就可以动态设置评分来回显之前的评分,但是经常我们需要与控件交互,动态地设置分数,所以我们还需要重写onTouchEvent方法完成事件处理。

事件处理

Android自定义评分控件的完整实例

评分需要随着手指的移动而动态变化,这里我们记录下当前手指所在的位置,如果在星星上面,就算出当前位置距离星星左边的长度占据整个星星宽度的百分比,然后根据设置的stepSize参数动态微调总评分。

评分监听

我们还需要将评分暴露给外部,处理主动调用getRating()方法获取之外,我们还可以提供一个监听接口,实时提供回调。

功能事件比较简单,只需要在事件处理的时候,微调总评分完成之后回调一下数据就可以了。

if (onRatingChangeListener != null) {
   onRatingChangeListener.onRatingChange(rating);
}

外部使用

ratingBar.setOnRatingChangeListener{
   ratingText.text = "当前评分:${it}"
}

来源:https://juejin.cn/post/7102048576607354917

标签:android,评分,控件
0
投稿

猜你喜欢

  • 详解c# 类的构造方法

    2023-02-10 17:17:19
  • 详解C#对路径...的访问被拒绝解决过程

    2021-06-01 11:12:10
  • Java中GUI工具包AWT和Swing用法介绍

    2022-02-06 09:02:35
  • Java集合类的组织结构和继承、实现关系详解

    2023-03-09 10:48:50
  • RxJava加Retrofit文件分段上传实现详解

    2022-03-02 05:36:10
  • C#中[]的几种用法示例代码

    2022-03-20 05:50:46
  • Java面试题冲刺第二十九天--JVM3

    2021-05-24 05:34:26
  • java多线程加锁以及Condition类的使用实例解析

    2023-08-07 07:25:30
  • C#基础教程之IComparable用法,实现List<T>.sort()排序

    2023-11-03 07:07:46
  • Android中ListView用法实例分析

    2022-04-08 17:11:29
  • Java基础之List内元素的排序性能对比

    2023-04-05 15:13:58
  • Android编程实现获取当前连接wifi名字的方法

    2023-11-24 15:41:50
  • C#使用base64对字符串进行编码和解码的测试

    2022-09-21 23:08:59
  • Spring Data JPA 设置字段默认值方式

    2021-08-13 07:27:06
  • SpringBoot自动装配原理详解

    2023-07-03 05:49:08
  • 一篇文章弄懂C#中的async和await

    2021-08-15 16:41:14
  • 在C#中根据HardwareID获取驱动程序信息的实现代码

    2023-08-04 08:15:31
  • 出现SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder“.的解决方法

    2021-09-01 12:02:09
  • IDEA 2021.3 使用及idea2021.3.1激活使用方法

    2021-06-06 03:49:38
  • Android入门教程之Fragment的具体使用详解

    2021-09-30 01:21:57
  • asp之家 软件编程 m.aspxhome.com