先看效果(下图里的用户的等级小星星):
这里本来可以修改ratingbar,使用自定义样式,即修改ratingbar图片来实现自定义ratingbar目的,但是这样图片的大小就不好控件,只能是图片给多大的显示多大,很无奈,我自己写了一个较灵活使用的ratingBar:
package com.gtuu.gzq.customview; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.util.AttributeSet; import android.widget.ImageView; import android.widget.LinearLayout; import com.gtuu.gzq.R; /** * 自定义rating bar * * @author chenwenbiao * @date 2014-5-3 * @version */ @SuppressLint("NewApi") public class MyRatingBar extends LinearLayout{ private float totalWidth; private float totalHeight; private int margin; private int startNumber; private int rating;//等级 private int ratingInResourceId;//相当于选中时的资源图 private int ratingOutResourceId;//相当于非选中时的资源图 private ImageView imageView; private TypedArray mTypedArray; private Context context = null; public MyRatingBar(Context context) { this(context, null); } public MyRatingBar(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyRatingBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); this.context = context; mTypedArray = context.obtainStyledAttributes(attrs, R.styleable.MyRatingBar); //获取自定义属性和默认值 totalWidth = mTypedArray.getDimension(R.styleable.MyRatingBar_total_width, 40); totalHeight = mTypedArray.getDimension(R.styleable.MyRatingBar_total_height, 10); margin = (int) mTypedArray.getDimension(R.styleable.MyRatingBar_margin, 2); startNumber = mTypedArray.getInt(R.styleable.MyRatingBar_start_number, 0); rating = mTypedArray.getInt(R.styleable.MyRatingBar_rating, 0); ratingInResourceId = mTypedArray.getResourceId(R.styleable.MyRatingBar_rating_in_bg, -1); ratingOutResourceId = mTypedArray.getResourceId(R.styleable.MyRatingBar_rating_out_bg, -1); mTypedArray.recycle(); if(startNumber > 0){ initialsView(); } } private void initialsView(){ /** * 生成startNumber个自定义图片 */ for(int i = 0 ; i < startNumber ; i++){ ImageView imageView = new ImageView(context, null);//存放自定义图片,如五角星的图片控件 if(i < rating){ imageView.setImageResource(ratingInResourceId);//设置等级内的图片 } else { imageView.setImageResource(ratingOutResourceId);//等级外的图片 } LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams((int)(totalWidth / startNumber), (int)totalHeight);//设计每一个自定义图片的大小 layoutParams.setMargins(margin, 0, margin, 0); addView(imageView,layoutParams); } } //设置星星的个数 public void setRating(int level){ //防止level超出星星个数 if( level > startNumber){ level = startNumber; } for(int i = 0 ; i < startNumber ; i++){ ImageView subView = (ImageView) getChildAt(i); if(i < level){ subView.setImageResource(ratingInResourceId);//设置等级内的图片 }else{ subView.setImageResource(ratingOutResourceId);//等级外的图片 } } invalidate(); } }
使用简单:
<com.vvpinche.view.MyRatingBar android:layout_width="80dp" android:layout_height="20dp" ptr:total_width="160dp" ptr:total_height="20dp" ptr:margin="2dp" ptr:start_number="6" ptr:rating="3" ptr:rating_in_bg="@drawable/comment_star" ptr:rating_out_bg="@drawable/comment_star_no_select" />
value文件夹下加入attrs.xml:
<?xml version="1.0" encoding="UTF-8"?> <resources> <!-- 等级自定义等级控件属性 --> <declare-styleable name="MyRatingBar"> <attr name="total_width" format="dimension" /> <attr name="total_height" format="dimension" /> <attr name="margin" format="dimension" /> <attr name="start_number" format="integer" /> <!-- 等级数 --> <attr name="rating" format="integer"></attr> <!-- 等级内图片 --> <attr name="rating_in_bg" format="reference"></attr> <!-- 等级外图片 --> <attr name="rating_out_bg" format="reference"></attr> </declare-styleable> </resources>
这里给的星星图片是比较大的,而结过使用上面自定义的ratingbar后,图片也相应小,符合使用。
相关推荐
本篇文章将详细探讨如何根据实际需求自定义RatingBar,实现星星之间的间距调整,以及分享一个自定义RatingBar的实例——MyRatring。 首先,我们要理解Android RatingBar的基本用法。RatingBar是基于ProgressBar的...
然而,系统默认的RatingBar样式可能无法满足所有设计需求,因此我们需要自定义RatingBar以达到特定的视觉效果。本篇将详细介绍如何在Android中自定义一个用星形来显示等级评定的RatingBar。 一、自定义RatingBar的...
1. **自定义RatingBar的基本步骤** - 创建一个新的XML布局文件,定义自定义RatingBar的外观。这可以通过在res/drawable目录下创建一个shape drawable来实现,设置星星的形状、颜色等属性。 - 在Java代码或XML布局...
为解决此问题,可以在自定义RatingBar的XML布局中设置`android:layout_width`和`android:layout_height`为`wrap_content`,并使用`android:scaleType="fitStart"`或`android:scaleType="fitEnd"`来控制星星的排列...
Android 中自定义 RatingBar 方法 在 Android 开发中,RatingBar 是一个非常常用的组件,用于显示评分或星级評價。但是,系统默认的 RatingBar 样式可能不够美观,于是我们需要自定义 RatingBar 的样式来满足我们的...
为了满足更复杂的用户需求,开发者常常需要自定义RatingBar,以实现整数和小数的递增递减功能。 自定义RatingBar的过程主要涉及到以下几个关键知识点: 1. **自定义View**:在Android中,自定义UI组件通常需要继承...
本教程将深入探讨如何自定义RatingBar,实现五星评论的功能。 1. RatingBar的基本使用 - RatingBar是Android的自带组件,位于android.widget包下。 - 在XML布局文件中,可以通过<RatingBar>标签来创建一个...
本文将详细介绍如何自定义RatingBar的背景图片以及解决在Android 6.0(API级别23)设备上可能出现的显示不全问题。 首先,我们需要了解RatingBar的基本结构。RatingBar本质上是一个水平的ProgressBar,它通过显示一...
本文将深入探讨如何通过源码实例来实现自定义RatingBar。 首先,RatingBar的基本用法是创建一个XML布局文件,在其中声明RatingBar并设置相关属性,如星星数量、选中状态的颜色等。例如: ```xml <RatingBar ...
由于项目中需要使用到ratingbar,可之前每次使用总有各种各样的限制 使用过的小伙伴可能会有所体会,这次需要设置ratingbar之间的间距,我试了很多种方法都无效 迫于无奈,只能自己写一个呗 现在分享出来给小伙伴们...
然而,Android系统默认的RatingBar样式可能不能满足所有设计需求,因此开发者经常需要自定义RatingBar来达到特定的视觉效果。本文将详细介绍如何在Android项目中实现自定义RatingBar。 首先,我们需要了解RatingBar...
android自定义RatingBar显示效果
首先,我们来看自定义Ratingbar。Ratingbar是Android系统提供的一个用于展示评分或评级的控件,通常以星星的形式显示。自定义Ratingbar主要包括以下几个方面: 1. **样式定制**:可以通过修改默认的XML资源文件,如...
自定义RatingBar可以让你更好地控制其外观和行为,以适应应用的独特设计需求。本篇文章将深入探讨如何自定义RatingBar的显示。 首先,RatingBar的基础用法是通过XML布局文件来配置。在`res/layout`目录下创建一个新...