重学 Android 自定义 View 系列(八):星星评分控件(RatingBar)

Android 自定义RatingBar实现 Android开发中,经常要实现星星的评分效果如下图,所以今天就记录下来,以便他人使用。 1、自定义RatingBar代码: package com.example.myapplicationtest; import android.content.Context; import android.cont... 阅读详情

前言

本节实现一个常见的星星评分控件,广泛应用于各种评价类应用中,比如电影评分、商品评价等。难度不大,直接开搂!

最终效果如下:
在这里插入图片描述

1. 效果分析


  • 显示若干颗星星(默认为5颗,可根据属性配置)。
  • 可以通过点击和滑动星星来选择评分。

效果展示:

  • 默认显示N颗空星,点击或滑动时,选中的星星将变为填充状态

2. 技术实现


2.1 在 res/values/attrs.xml 文件中,定义属性。两张图片和星星的数量。

    <declare-styleable name="RatingBar">
        <attr name="starNormal" format="reference"/>
        <attr name="starFocus" format="reference"/>
        <attr name="gradeNumber" format="integer"/>
    </declare-styleable>

2.2 设置控件的尺寸,确定控件大小

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    
    // 高度为一颗星星的高度,加上 padding 的高度
    int height = mStarNormalBitmap.getHeight() + getPaddingTop() + getPaddingBottom();
    // 宽度为星星数量 * 单颗星星的宽度
    int width = mStarNormalBitmap.getWidth() * mGradeNum;
    
    setMeasuredDimension(width, height);
}

2.3 绘制星星,mCurrentGrade 为当前用户选中的等级,用来确定绘制几颗实心星星。

@Override
protected void onDraw(Canvas canvas) {
    for (int i = 0; i < mGradeNum; i++) {
        if (mCurrentGrade > i) {
            // 绘制已选中的实心星星
            // drawBitmap 参数: @NonNull Bitmap bitmap, float left, float top, @Nullable Paint paint
            canvas.drawBitmap(mStarFocusBitmap, i * mStarNormalBitmap.getWidth(), 0, null);
        } else {
            // 绘制未选中的空心星星
            canvas.drawBitmap(mStarNormalBitmap, i * mStarNormalBitmap.getWidth(), 0, null);
        }
    }
}

2.4 处理用户交互(重点)

这个控件的关键技术点就是处理触摸手势,这里只使用 MotionEvent.ACTION_DOWN 和 MotionEvent.ACTION_MOVE,就能应付全部可能手势,不需要抬起动作,注意 最后 return true; 代表消费触摸,如果不为true,则 MotionEvent.ACTION_MOVE 行为不生效!

下图为安卓控件和屏幕的坐标相关介绍,这里主要使用的是event.getX() x坐标, 相对于当前控件的,这里先初步认识一下,以后会用到。

在这里插入图片描述

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_MOVE:
            float x = event.getX();  // 获取触摸位置的 x 坐标
            float grade = x / mStarNormalBitmap.getWidth() + 1; // 计算当前评分

            // 限制评分范围
            if (grade < 0) {
                grade = 0;
            }
            if (grade > mGradeNum) {
                grade = mGradeNum;
            }

            // 更新评分并刷新界面
            if (mCurrentGrade != (int) grade) {
                mCurrentGrade = (int) grade;
                invalidate();
                Log.i("TAG", "分数:" + mCurrentGrade);
            }
            break;
        default:
            break;
    }

    return true;
}

3. 最后


这里只是绘制星星评分最基础的步骤,比如,还有半颗星的评分,原理一样,感兴趣的可以自行拓展。再会!

源码及更多自定义View已上传Github:DiyView

另外给喜欢记笔记的同学安利一款好用的云笔记软件,对比大部分国内的这个算还不错的,免费好用:wolai

Android星级评分条设计与实现 本文还有配套的精品资源,点击获取 简介:星级评分条是Android开发中常用的UI元素,用于收集用户反馈。本示例深入探讨了RatingBar的使用方法,包括XML布局声明、属性详解、编程接口、监听评分变化、自定义样式和示例代码。通过本课程,开发者可以掌握RatingBar的实际应用,提升用户体验。 1. Android星级评分条简介 星级评分条是一个常用的控... 阅读详情

相关推荐

自定义Android RatingBar控件教程与实战

本文还有配套的精品资源,点击获取 简介:Android内置的RatingBar控件在样式上有限,无法满足所有设计需求。因此,本文将探讨如何自定义RatingBar,包括修改其样式、背景图、间距、大小和分数等属性。教程分为创建自定义View类、绘制星星、设置属性、XML布局和自定义属性定义等步骤,详细阐述了实现高度可定制化RatingBar的过程。 1. Andro...

weixin_42603332的博客 1547

Android 评分控件AndroidRatingStar,扩张半分功能

在开源基础上扩展功能 获取触摸事件的位置(x,y) https://blog.youkuaiyun.com/weijinqian0/article/details/80408018 //评分控件的地址 https://github.com/everhad/AndroidRatingStar val starView = helper.getView<RatingStarView&...

LPL0129的博客 537

android自定义RatingBar显示效果

准备好你要作为 RatingBar 星星的自定义图标,可以是两个不同状态的图标,一个用于选中状态(比如 star_filled.png),另一个用于未选中状态(比如 star_empty.png)。在 res/values/styles.xml 文件中定义自定义样式:</</在这个样式中,我们引用了之前创建的 LayerDrawable 文件,并设置了 RatingBar 的高度。<RatingBar。

FDoubleman的博客 811

Android 自定义间距大小的评分控件

自定义间距评分控件

flying0916的博客 453

Android 开发】:UI控件之 RatingBar 评分控件的使用

RatingBar主要用在电子相册、网上书店和对文章进行评分的功能。 对于博文地址:【Android 开发】:UI控件之 RatingBar 评分控件的使用 http://blog.youkuaiyun.com/xukunhui2/article/details/9034413

Android星级评分条控件RatingBar使用详解

主要为大家详细介绍了Android星级评分条控件RatingBar的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

android中评分的控件,Android评分RationBar控件使用详解

Android评分RationBar控件,供大家参考,具体内容如下主要是不想用太多三方的控件,所以决定尽可能自己写,最近有写一个评分的页面,废话不多说直接上图我觉得嘛 这个东西用ViewGroup包起来感觉会写很多View 于是我决定使用之定义控件 直接上代码/*** 评论专用星星* * 宽高都不能用wrap_content 必须使用固定值或者match_parent* * MIXED : 在控件...

weixin_33622555的博客 836

安装升级最新版本postman时遇到“无法定位程序输入点 SetDefaultDllDirectories于动态链接库KERNEL32.dll 上.”的问题

软件版本迭代更新真快,最近升级最新Postman版本时出现以下问题 我就简单纪录下解决办法: 备注:我用的是最新的postman工具包:Postman-win64-7.25.0-Setup.exe,目前是最新 0. 前提是已经到postman官网https://www.postman.com/downloads/下载好软件工具包 1.安装window7系统更新补丁KB2533623,请到微软公司官网https://support.microsoft.com/en-us/help/2...

董广明的博客 1万+

安卓自定义评分控件StarBar

安卓自定义评分控件StarBarStarBar前言项目效果图如何使用1. 添加依赖2. xml布局3. 代码使用后话 StarBar 前言 该项目相关源码地址SakurajimaMaii/StarBar,欢迎fork和star,如果你对该项目存在疑问,可以在issue内提出疑问方便我解答 该项目开发参考GHdeng/StarBarExample项目,原项目地址GHdeng/StarBarExample 项目效果图 如何使用 1. 添加依赖 allprojects { repositories

人生就是为了樱岛麻衣的博客 796

MacOS上VScode配置PlatformIO Core的疑难杂症与提速实战

本文详细解析了在MacOS上使用VScode配置PlatformIO Core时遇到的安装卡死、新建项目缓慢等常见问题,并提供了官方脚本安装、网络优化、命令行预下载等实用解决方案。通过环境变量配置和镜像源加速,大幅提升开发效率,特别适合ESP32等嵌入式开发场景。

weixin_42567046的博客 220

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2469

android自定义控件(星级评分)

一、背景 视觉过来提了一个需求,要求完成一个星级评分控件,该控件中的星星的颜色需要实现渐变的效果,并且没有渐变的规律,也就是说各个星星的颜色需要不一样,效果如下: 二、问题分析 星星控件对应的控件是android.support.v7.widget.AppCompatRatingBar,利用这个控件可以实现星级评分效果,但是每个星星的颜色是一样的,效果如下:

xiao_nian的博客 2万+

分布式计算Ray框架面试题及参考答案

动态任务图执行引擎是一种能够根据任务之间的依赖关系和运行时的实际情况,动态构建和执行任务图的系统。在 Ray 中,动态任务图执行引擎允许任务在运行时根据数据可用性、计算资源状态等因素,灵活地决定后续任务的执行顺序和方式。对于 AI 应用来说,其往往具有动态性的特点。例如,在深度学习模型的训练过程中,可能需要根据训练的结果动态调整下一轮训练的参数、数据增强方式或者模型结构。动态任务图执行引擎可以很好地支持这些动态需求。它能够根据 AI 应用中各个任务的实时输出和依赖关系,动态地生成和调整任务图。

大模型大数据攻城狮的专栏 1349

DLStarRating - 简单易用的评分控件

DLStarRating - 简单易用的评分控件 DLStarRating是一个简单易用的Android评分控件。它允许你在应用中添加一个可以滑动的星星评分条,并且支持自定义样式。 功能特性 支持自定义星星图片和空心星星图片。 可以设置最大分数、最小分数和默认分数。 支持单击和长按事件。 支持滑动选择分数。 使用方法 在你的build.gradle文件中添加以下依赖: dependencies...

gitblog_00074的博客 465

QT实现OPCUA服务端客户端(附完整源码)

QT实现OPCUA服务端客户端(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 1818

Ubuntu 22.04+/WSL2 中解决 `error: externally-managed-environment` 并成功安装 PyTorch + vLLM 的完整指南

Ubuntu 22.04+/WSL2 因遵循 PEP 668 规范,系统 Python 被标记为“外部管理”,导致直接使用 pip install 安装包时报错 externally-managed-environment。解决方案是创建虚拟环境: 通过 python3 -m venv ~/vllm-env 创建隔离环境 激活环境后安装 PyTorch(CUDA 12.1)和 vLLM 避免使用 sudo pip 或 --break-system-packages,防止破坏系统依赖 关键点: 虚拟环

刘一说的IT专栏 296

Android-自定义三角形评分控件

首先,创建一个自定义View类TriangleRatingAnimView,用于绘制三角形和动画效果。/*** 三角形评分控件*/= null,init {// 绘制外部三角形close()// 绘制顶点到重心的连线// 绘制内部动态三角形close()// 绘制动态点上的空心圆

dalong的博客 490

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

Android自定义Rating Bar

Android自定义Rating Bar

李波的专栏 625

如何使用Python爬取并保存网页上的所有附件

爬虫(Crawler)是一种自动化程序,它通过模拟人工访问网页并下载网页上的数据或文件,常用于数据采集和分析。爬虫通常以“爬取”的形式自动浏览和提取网页中的各种信息。本文详细介绍了如何使用Python爬取并保存网页中的附件文件,涵盖了网页解析、文件下载、多线程与异步优化等内容。希望通过本文的讲解,能够帮助你理解并掌握附件爬取的技巧。在实际应用中,爬虫开发不仅需要解决技术问题,还要遵守网络道德和法律法规,避免不当使用爬虫造成负面影响。

2201_76125261的博客 965

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

推荐开源项目:StarRatingView - 简洁易用的Android星星评分视图

推荐开源项目:StarRatingView - 简洁易用的Android星星评分视图 去发现同类优质开源项目:https://gitcode.com/ 在移动应用开发中,给用户提供一种便捷的方式来表达他们的反馈或评价是非常常见的需求。 是一个为 Android 平台设计的轻量级库,它允许开发者快速集成一颗颗闪烁的星星评级视图,为你的应用增添美观且互动性强的评分功能。 项目简介 StarRating...

gitblog_00028的博客 549

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Android自定义星星评分控件代替RatingBar的使用

大家做android的就知道android自带的控件很丑,所以很多控件都需要自定义,例如这里说道的RatingBar控件,自带的奇丑无比,那么下面看看怎么利用自定义控件代替RatingBar控件吧,直接上个工具类,可以直接粘贴使用 import android.content.Context; import android.content.res.TypedArray; import andro

青穗的博客 5075

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android自定义评分条(RatingBar)

android自定义评分条(RatingBar)本自定义控件是因为本人在开发过程中,评分条的适配出现问题而诞生,在网上找了些自定义控件,发现都不是自己想要的,所以只能自己动手。 原生的RatingBar适配难是因为在要自定义星星图标无法设置星星的大小和星星之间的间距,适配了这个厂商的手机可能那个手机有又问题,当时我就是在vivo手机适配好,到了同样分辨率的乐视手机出现了问题,我这里的思路是

liu_xiong的博客 8255

【Android自定义View实战】之自定义评价打分控件RatingBar,可以自定义星星大小和间距

在Android开发中,我们经常会用到对商家或者商品的评价,运用星星进行打分。然而在Android系统中自带的打分控件,RatingBar特别不好用,间距和大小无法改变。所以,我就自定义了一个特别好用的打分控件。在项目中可以直接使用,特别简单。下面直接上图: 效果图 实现代码,有详细的注释 在attrs中声明的可以在xml中设置的变量 declare-styleable nam

DylanAndroid 1万+

Android 之 RatingBar (星级评分条)

也就是说他同样有用ProgressBar的相关属性,接下来我们来探究RatingBar特有的属性!接着在style.xml中自定义下RatingBar Style,在。:是否用作指示,用户无法更改,默认false。评分每次增加的值,必须为浮点数。只需为RatingBar设置。:显示多少个星星,必须为整数。:默认评分值,必须为浮点数。

leyang0910的博客 853

【Android】支持小数(浮点数)的星星评分控件-FloatRatingBar

本人自创的,一种使用最简单的方式实现的星星评分控件,可设置任意0-5之间的小数(float类型)。使用时只需要两张图片:一张选中的星星、一张未选中的星星。

devnn的专栏 1363
上一篇: 分析android :The binary version of its metadata is 1.8.0, expected version is 1.5.1.等系列问题
下一篇: 实现uniapp开发安卓应用使用AIDL与原生安卓通信
_蓝橙
博客等级 码龄7年 1179粉丝 174原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值