網(wǎng)站首頁 編程語言 正文
前言
無意中翻到幾年前寫過的一個(gè)RatingBar,可以拖拽,支持自定義星星圖片,間距大小等參數(shù)。
自定義參數(shù)
為了方便擴(kuò)展,支持更多的樣式,這里將大部分參數(shù)設(shè)置成支持外部可配置的形式。
<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 星星最大個(gè)數(shù)
- stepSize 評(píng)分步長,即能不能選中0.1個(gè)星
- rating 默認(rèn)評(píng)分
- starWidth 星星寬度
- starHeight 星星高度
解析參數(shù)
創(chuàng)建星星位圖的時(shí)候需要根據(jù)配置的大小和圖片本身的寬高進(jìn)行縮放。
繪制
繪制完成之后我們就可以動(dòng)態(tài)設(shè)置評(píng)分來回顯之前的評(píng)分,但是經(jīng)常我們需要與控件交互,動(dòng)態(tài)地設(shè)置分?jǐn)?shù),所以我們還需要重寫onTouchEvent
方法完成事件處理。
事件處理
評(píng)分需要隨著手指的移動(dòng)而動(dòng)態(tài)變化,這里我們記錄下當(dāng)前手指所在的位置,如果在星星上面,就算出當(dāng)前位置距離星星左邊的長度占據(jù)整個(gè)星星寬度的百分比,然后根據(jù)設(shè)置的stepSize
參數(shù)動(dòng)態(tài)微調(diào)總評(píng)分。
評(píng)分監(jiān)聽
我們還需要將評(píng)分暴露給外部,處理主動(dòng)調(diào)用getRating()方法獲取之外,我們還可以提供一個(gè)監(jiān)聽接口,實(shí)時(shí)提供回調(diào)。
功能事件比較簡單,只需要在事件處理的時(shí)候,微調(diào)總評(píng)分完成之后回調(diào)一下數(shù)據(jù)就可以了。
if (onRatingChangeListener != null) { onRatingChangeListener.onRatingChange(rating); }
外部使用
ratingBar.setOnRatingChangeListener{ ratingText.text = "當(dāng)前評(píng)分:${it}" }
總結(jié)
原文鏈接:https://juejin.cn/post/7102048576607354917
相關(guān)推薦
- 2022-11-19 Golang切片Slice功能操作詳情_Golang
- 2022-11-27 Python+decimal完成精度計(jì)算的示例詳解_python
- 2022-07-01 c++詳細(xì)講解構(gòu)造函數(shù)的拷貝流程_C 語言
- 2022-06-20 C語言超全面define預(yù)處理指令的使用說明_C 語言
- 2022-07-11 atom插件之·atom-minify配置支持壓縮es6
- 2023-07-14 element組件中的時(shí)間選擇器,禁用選擇時(shí)間,picker-options屬性詳解,時(shí)間選擇器范圍
- 2022-06-18 datagridview實(shí)現(xiàn)手動(dòng)添加行數(shù)據(jù)_C#教程
- 2022-04-21 Docker容器跨主機(jī)通信overlay網(wǎng)絡(luò)的解決方案_docker
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支