android github 评分控件_NiceRatingBar:比Android原生RatingBar更好用的评分控件

作为Android官方提供的评分控件,RatingBar对于大家来说是比较熟悉的,但大部分人在用过原生RatingBar后肯定对它不满意,因为实在是不好用。这里的不好用包括了:大小改起来不方便、星星间距不好改、使用自己的图片居然还要写xml……总之你很难说出它的优点来,缺点却是脱口而出。

有鉴于此,自己写一个自定义的RatingBar就有必要了,而且要保证实现一些常用的属性,如大小、间距、点击事件等。考虑到这个控件是要在实际项目中发挥作用,而实际工作里是有UI设计给切图的,所以就没有在控件里自己去画星星,而是直接用切图来展示。当然,以后我会考虑使用Canvas直接画星星,这样使用的时候只需要给出颜色值就能得到想要的星星了。

好吧,这个项目我把它命名为NiceRatingBar,你可以在Github找到它的源码:https://github.com/KaelLi1989/NiceRatingBar。当然,这是一个新发布的项目,功能目前比较单一,只支持使用图片来展示星星,不能只输入颜色就自己画星星,并且最低支持到0.5的颗粒度,还无法做到0.1分的颗粒度(更低就没必要了)。当然,这些feature未来会支持的。

一般来说一个评分控件需要有2种基本功能:一种是仅仅展示评分,无法继续操作更改评分;另一种就是可以更改评分。这2种基本功能,NiceRatingBar当然都实现了,仅仅展示评分一般用在商品列表和当前用户已经评分过的、不能重复评分的商品详情页面,能更改评分的地方一般就是用户对某个商品进行评分了。本控件支持传统的点击星星评分,也支持随手势左右滑动进行线性评分。

通过点击星星来设置分数

通过点击星星来设置分数

通过滑动手势来设置分数

NiceRatingBar的使用很简单,大概分下面这么几部:

添加jitpack仓库,因为项目发布在Github,最终用jitpack打包,所以如果你的项目里没有jitpack仓库,需要添加一下。具体的方法是,在项目的根gradle文件,增加jitpack的仓库地址:

allprojects {

repositories {

……

maven { url 'https://jitpack.io' }

}

}

在相应的module的gradle里添加NiceRatingBar的依赖:

implementation 'com.github.KaelLi1989:NiceRatingBar:1.0.0'

当然如果你把依赖放在了项目的公共基础模块里,那么就要这样:

api 'com.github.KaelLi1989:NiceRatingBar:1.0.0'

在布局文件里进行控件的声明,需要注意有几项属性是必须设置的:

android:id="@+id/niceRatingBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

// int型,代表满分,默认是5

app:nrb_starTotal="10"

// 每个星星的宽度

app:nrb_starImageWidth="16dp"

// 每个星星的高度

app:nrb_starImageHeight="16dp"

// 一颗完整星星的图片资源,是必须设置的属性

app:nrb_starFullResource="@drawable/ic_star_black_16dp"

// 一颗空白星星的图片资源,是必须设置的属性

app:nrb_starHalfResource="@drawable/ic_star_border_black_16dp"

// 半颗星星的图片资源,非必须。若设置了,则支持半颗星的展示与评分,否则仅支持整颗星效果

app:nrb_starEmptyResource="@drawable/ic_star_half_black_16dp"

// float型,初始评分值,非必须

app:nrb_rating="1.1"

// 星星之间的间距

app:nrb_starImagePadding="2dp"

// Enable表示用户可以进行评分,Disable则表示不可评分,仅展示评分

app:nrb_ratingStatus="Enable" />

然后在Java(Kotlin)代码里进行相应的设置,比如你希望监听到用户的评分:

niceRatingBar.setOnRatingChangedListener(new OnRatingChangedListener() {

@Override

public void onRatingChanged(float rating) {

// 在这里得到的rating就是用户通过控件得到的评分,通常你应该用通过接口把这个评分传到服务端

}

});

当把评分传到服务端成功后,在接口成功的回调里,你可以使用

niceRatingBar. setRatingStatus(RatingStatus.Disable);

这样控件的状态就变成了不能操作评分,只能展示评分了。之所以这样操作,是因为通常一个对象(如一件商品)只允许同一个用户评分1次,如果你允许多次评分那就没必要关闭打分了。

如果服务端提前获取数据,某个商品的评分是4.5分,而且只是展示评分不能打分,那么就要使用下面的代码,来设置评分,同时关闭更改评分的能力:

niceRatingBar. setRating(4.7f);

niceRatingBar. setRatingStatus(RatingStatus.Disable);

是的,NiceRatingBar的使用就是这么简单,马上替换掉那个难用的原生RatingBar吧。

本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中...

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值