当前位置: 首页 > 编程笔记 >

Android实现根据评分添加星级条

薛宏壮
2023-03-14
本文向大家介绍Android实现根据评分添加星级条,包括了Android实现根据评分添加星级条的使用技巧和注意事项,需要的朋友参考一下

简述

在仿写豆瓣的时候,发现了根据评分不同,星级数也不同的星级条。

百度一搜,发现Android有自带控件UIRatingBar,而iOS得要自己写…好吧,那就写吧。

图片素材

首先,要准备三张图片,图片如下:
空星,半星,全星

因为我们可以看到,在豆瓣的评分星级条里,只有空、半、全星,所以只需要准备这3种图片。

思路

豆瓣的星级条中既有图片,又有文字,所以我们自定义一个继承于UIView的starView。

初始化方法

因为星级条要根据评分的数据来决定星的颗数,所以我们要重新创建一个初始化方法:

//在starView.m中写

- (instancetype)initWithFrame:(CGRect)frame score:(double)score;


//在starView.h中对其进行操作实现
- (instancetype)initWithFrame:(CGRect)frame score:(double)score{
 self = [super initWithFrame:frame];
 //记得把传过来的score赋值给全局变量_starScore
 _starScore = score;
 return self;
}

这样,我们就可以在ViewController.m中利用此方法初始化一个星级条视图:

starView *star = [[CJTStarView alloc] initWithFrame:CGRectMake(100, 100, 200, 50) score:6.8];

此处的score可以改成根据网络请求得到的评分数据。

根据添加星星图片

在这里,我设置的分数与星星的对应关系如下:

4.6-5.5  2.5颗星
5.6-6.5  3颗星
6.6-7.5  3.5颗星
7.6-8.5  4颗星
8.6-9.5  4.5颗星

而因为我们只有5颗星,所以对分数做如下处理:

_starScore = (_starScore / 2 - 0.3);

接下来就是用循环添加图片到view上,因为我们有三种图片,所以在循环中还要加判断,代码如下:

for (int count = 0; count < 5; count++) {
 UIImageView *starImageView = [[UIImageView alloc] init];
 starImageView.frame = CGRectMake(count * self.frame.size.height, 0, self.frame.size.height, self.frame.size.height);
 [self addSubview:starImageView];
 if (count <= _starScore - 0.5) {
  starImageView.image = [UIImage imageNamed:@"stars_full"];
 } else {
  if (_starScore - count >= 0 && _starScore - count < 0.5) {
  starImageView.image = [UIImage imageNamed:@"stars_half"];
  } else {
  starImageView.image = [UIImage imageNamed:@"stars_empty"];
  }
 }
 }

这里的判断条件是数学问题,就不详细讲了。

当然,如果分数与星星的对应规则和我不同,那么就要适当修正这里的判断条件。

在星级条后添加分数

在豆瓣到星级条后面还有分数,因此我们在view中添加一个UILabel对象

UILabel *scoreLabel = [[UILabel alloc] init];
 scoreLabel.frame = CGRectMake( 5 * self.frame.size.height + 10, 8, self.frame.size.width - 5 * self.frame.size.height - 10, self.frame.size.height - 8);
 scoreLabel.text = [NSString stringWithFormat:@"%.1f", _starScore];
 scoreLabel.textColor = [UIColor grayColor];
 scoreLabel.font = [UIFont systemFontOfSize:25];

这里要注意,因为我们在设置星级图的时候会修改_starScore的值,所以要在添加星星图片之前设置UILabel。

效果图

最后做出来到效果如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Android星级评分条的实现代码,包括了Android星级评分条的实现代码的使用技巧和注意事项,需要的朋友参考一下 RatingBar星级评分条 它跟拖动条类似。都允许用户拖动来改变进度,不同的是,星级评分条通过星星图案表示进度。想淘宝,等等都有这个东西。很简单。 重要记一个组件<RatingBar 属性列表></RatingBar>,属性见名知意 还有三个方法: 1、getRat

  • Rate 组件使用 html5 中 data- 属性实现,当点击评分区域时,获取 data 属性的值,然后通过 vue 中 :class 控制评分星星的状态,即是否为 active。 <template> <div class="page__bd"> <div class="weui-cells__title">点击评分</div> <div class="weui

  • 本文向大家介绍使用jQuery实现星级评分代码分享,包括了使用jQuery实现星级评分代码分享的使用技巧和注意事项,需要的朋友参考一下 前面有一篇原生js实现星级评分 。可能覆盖面不是很广,现在给出一个jquery实现的星级评分。   使用方法超级简单,这里就不多废话了,小伙伴们拿走自由发挥吧。

  • 本文向大家介绍JavaScript实现星星等级评价功能,包括了JavaScript实现星星等级评价功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js星星等级评价的具体代码,供大家参考,具体内容如下 效果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 主要内容:本节引言:,1.RatingBar基本使用:,2.定制环节:,本节小结:本节引言: 上一节的SeekBar是不是很轻松咧,本节我们学的这个RatingBar(星级评分条)也非常简单,相信在某宝, 买过东西的对这个应该不陌生,收到卖家的包裹,里面很多时候会有个小纸片,五星好评返还多少元这样, 而评分的时候就可以用到我们这个星级评分条了~先来瞅瞅官方文档 官方文档:RatingBar 我们可以看到,这玩意和SeekBar的类结构是一样的,也是ProgressBar的子类:

  • 本文向大家介绍jquery插件star-rating.js实现星级评分特效,包括了jquery插件star-rating.js实现星级评分特效的使用技巧和注意事项,需要的朋友参考一下 特效介绍 jquery星级评分插件star-rating.js下载插件,点击星星或者心的左边,就是半分,右边就是1分。点击减号,分数置为0。不兼容IE8以下的浏览器。 演示图 使用方法 第一步、引入下面的代码: 第二