網站首頁 編程語言 正文
前言
無意中翻到幾年前寫過的一個RatingBar,可以拖拽,支持自定義星星圖片,間距大小等參數。
自定義參數
為了方便擴展,支持更多的樣式,這里將大部分參數設置成支持外部可配置的形式。
<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 星星高度
解析參數
創建星星位圖的時候需要根據配置的大小和圖片本身的寬高進行縮放。
繪制
繪制完成之后我們就可以動態設置評分來回顯之前的評分,但是經常我們需要與控件交互,動態地設置分數,所以我們還需要重寫onTouchEvent
方法完成事件處理。
事件處理
評分需要隨著手指的移動而動態變化,這里我們記錄下當前手指所在的位置,如果在星星上面,就算出當前位置距離星星左邊的長度占據整個星星寬度的百分比,然后根據設置的stepSize
參數動態微調總評分。
評分監聽
我們還需要將評分暴露給外部,處理主動調用getRating()方法獲取之外,我們還可以提供一個監聽接口,實時提供回調。
功能事件比較簡單,只需要在事件處理的時候,微調總評分完成之后回調一下數據就可以了。
if (onRatingChangeListener != null) { onRatingChangeListener.onRatingChange(rating); }
外部使用
ratingBar.setOnRatingChangeListener{ ratingText.text = "當前評分:${it}" }
總結
原文鏈接:https://juejin.cn/post/7102048576607354917
相關推薦
- 2022-08-22 Python利用watchdog模塊監控文件變化_python
- 2022-07-06 C++如何切割String對象的方法_C 語言
- 2022-11-15 如何將Android?Studio卸載干凈_Android
- 2022-02-20 Android?WebView實現全屏播放視頻_Android
- 2023-01-03 Android?輸入框被擋問題完美解決方案_Android
- 2022-06-25 C#將DataGridView中的數據保存到CSV和Excel中_C#教程
- 2022-03-14 surface屏幕自動調節亮度無法關閉
- 2022-05-10 開發跨域問題的解決
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支