求教ratingbar 自定义间距如何控制星星之间的间距

Spacing between the stars of a rating bar? [一个评级条星星之间的间距?] - 问题-字节技术
Spacing between the stars of a rating bar?
一个评级条星星之间的间距?
问题 (Question)
ho can I set a spacing beween the stars? Thats my ratingbar:
ratingBar = (RatingBar) inflater.inflate(R.layout.ratingbar, null);
ratingBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
The layout:
&?xml version="1.0" encoding="utf-8"?&
&RatingBar xmlns:android="/apk/res/android"
style="@style/myStyle" android:layout_alignParentRight="true"
android:layout_height="19dp" android:layout_width="wrap_content"
android:numStars="5"&
&/RatingBar&
The style:
&style name="myStyle" parent="@android:style/Widget.RatingBar"&
&item name="android:progressDrawable"&@drawable/android_r2_ratingstar_yellow&/item&
&item name="android:indeterminateDrawable"&@drawable/android_r2_ratingstar_grey&/item&
Thanks, cheers
何我可以设定间隔之间的星星吗?那是我的ratingbar:
ratingBar = (RatingBar) inflater.inflate(R.layout.ratingbar, null);
ratingBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
&?xml version="1.0" encoding="utf-8"?&
&RatingBar xmlns:android="/apk/res/android"
style="@style/myStyle" android:layout_alignParentRight="true"
android:layout_height="19dp" android:layout_width="wrap_content"
android:numStars="5"&
&/RatingBar&
&style name="myStyle" parent="@android:style/Widget.RatingBar"&
&item name="android:progressDrawable"&@drawable/android_r2_ratingstar_yellow&/item&
&item name="android:indeterminateDrawable"&@drawable/android_r2_ratingstar_grey&/item&
谢谢,干杯
最佳答案 (Best Answer)
You have to add the padding to the png itself. While there is something known as an Inset Drawable (/guide/topics/resources/drawable-resource.html#Inset) that you could wrap your drawable into, the code for 'tileify'-ing (as referred to in the android source code) doesn't handle the case of drawable being an inset drawable, and hence doesn't tile the image.
Here's the tilefy method (in ProgressBar.java, which is the ancestor to RatingBar.java: )
private Drawable tileify(Drawable drawable, boolean clip) {
if (drawable instanceof LayerDrawable) {
LayerDrawable background = (LayerDrawable)
final int N = background.getNumberOfLayers();
Drawable[] outDrawables = new Drawable[N];
for (int i = 0; i & N; i++) {
int id = background.getId(i);
outDrawables[i] = tileify(background.getDrawable(i),
(id == R.id.progress || id == R.id.secondaryProgress));
LayerDrawable newBg = new LayerDrawable(outDrawables);
for (int i = 0; i & N; i++) {
newBg.setId(i, background.getId(i));
return newBg;
} else if (drawable instanceof StateListDrawable) {
StateListDrawable in = (StateListDrawable)
StateListDrawable out = new StateListDrawable();
int numStates = in.getStateCount();
for (int i = 0; i & numS i++) {
out.addState(in.getStateSet(i), tileify(in.getStateDrawable(i), clip));
} else if (drawable instanceof BitmapDrawable) {
final Bitmap tileBitmap = ((BitmapDrawable) drawable).getBitmap();
if (mSampleTile == null) {
mSampleTile = tileB
final ShapeDrawable shapeDrawable = new ShapeDrawable(getDrawableShape());
final BitmapShader bitmapShader = new BitmapShader(tileBitmap,
Shader.TileMode.REPEAT, Shader.TileMode.CLAMP);
shapeDrawable.getPaint().setShader(bitmapShader);
return (clip) ? new ClipDrawable(shapeDrawable, Gravity.LEFT,
ClipDrawable.HORIZONTAL) : shapeD
你必须添加填料的PNG本身。虽然有一些众所周知的插图冲(HTTP:/ /开发商。Android。COM /指导/主题/资源/ drawable资源。HTML #插图),你可以把你拉进,代码为“tileify - ING(是指在Android源代码)不处理冲作为一个插图中的情况,因此不平铺图像。
这里的tilefy方法(在progressbar.java,这是祖先ratingbar.java:)
private Drawable tileify(Drawable drawable, boolean clip) {
if (drawable instanceof LayerDrawable) {
LayerDrawable background = (LayerDrawable)
final int N = background.getNumberOfLayers();
Drawable[] outDrawables = new Drawable[N];
for (int i = 0; i & N; i++) {
int id = background.getId(i);
outDrawables[i] = tileify(background.getDrawable(i),
(id == R.id.progress || id == R.id.secondaryProgress));
LayerDrawable newBg = new LayerDrawable(outDrawables);
for (int i = 0; i & N; i++) {
newBg.setId(i, background.getId(i));
return newBg;
} else if (drawable instanceof StateListDrawable) {
StateListDrawable in = (StateListDrawable)
StateListDrawable out = new StateListDrawable();
int numStates = in.getStateCount();
for (int i = 0; i & numS i++) {
out.addState(in.getStateSet(i), tileify(in.getStateDrawable(i), clip));
} else if (drawable instanceof BitmapDrawable) {
final Bitmap tileBitmap = ((BitmapDrawable) drawable).getBitmap();
if (mSampleTile == null) {
mSampleTile = tileB
final ShapeDrawable shapeDrawable = new ShapeDrawable(getDrawableShape());
final BitmapShader bitmapShader = new BitmapShader(tileBitmap,
Shader.TileMode.REPEAT, Shader.TileMode.CLAMP);
shapeDrawable.getPaint().setShader(bitmapShader);
return (clip) ? new ClipDrawable(shapeDrawable, Gravity.LEFT,
ClipDrawable.HORIZONTAL) : shapeD
本文翻译自StackoverFlow,英语好的童鞋可直接参考原文:从零开始学android(RatingBar评分组件.二十三.)
如果现在用户要对某个应用程序打分往往会使用图所示的,通过选择的“五角星”的个数来决定最终的打分成绩
这样的功能在之中,可以使用RatingBar组件实现,使用此组件可以方便用户的输入,而且很直观,RatingBar类的定义结构如下:
java.lang.Object
? android.view.View
? android.widget.ProgressBar
? android.widget.AbsSeekBar
? android.widget.RatingBar
RatingBar常用的方法
public RatingBar(Context context)
创建RatingBar对象
public int getNumStars()
取得评分数量
public float getRating()
取得当前值
public float getStepSize()
取得设置的步长
public boolean isIndicator()
判断是否可以操作
public void setIsIndicator(boolean isIndicator)
android:isIndicator
是否可以操作
public synchronized void setMax(int max)
设置最大值
public void setNumStars(int numStars)
android:numStars
设置评分星的个数
public void setOnRatingBarChangeListener
(RatingBar.OnRatingBarChangeListener listener)
设置操作监听
public void setRating(float rating)
android:rating
设置当前值
public void setStepSize(float stepSize)
android:stepSize
设置每次增长的步长
package com.example.
import org.w3c.dom.T
import android.os.B
import android.app.A
import android.widget.RatingB
import android.widget.RatingBar.OnRatingBarChangeL
import android.widget.TextV
public class MainActivity extends Activity {
private RatingBar ratingB
private TextView textV
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ratingBar = (RatingBar) this.findViewById(R.id.ratingBar1);
textView = (TextView) this.findViewById(R.id.textView1);
设置ratingBar的监听方法
ratingBar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
public void onRatingChanged(RatingBar ratingBar, float rating,
boolean fromUser) {
// TODO Auto-generated method stub
textView append显示数据
textView.append("***当前值:"+rating+"**步长:"+ratingBar.getStepSize()+"\n");
switch case 语句对评价的星星个数进行判断 给出相应的操作
switch ((int)rating) {
textView.setText("当前的用户评价:太糟了");
textView.setText("当前的用户评价:不太好");
textView.setText("当前的用户评价:不错哦");
textView.setText("当前的用户评价:很好哦");
textView.setText("当前的用户评价:太棒了");
第一种显示
Case语句判断显示效果
评分组件可以让用户和软件开发人员进行很好的反馈,对一些问题发表自己的看法
下节预报:
事件处理的几种设置方法
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'6731人阅读
自定义控件(2)
转载请注明出处,谢谢:
网上有很多自定义ratingBar的样式,但是关于星星间距问题扩大的,并没有很明显的介绍,我这篇文章就在此做出介绍。
先说下原理。让公司的ui妹妹给你切三张图片,如下图所示:
分别是全星,半星,和空星。每个星星的左右都有相同的间距,我这里是左右都有5px的间距。
之后就是普通的写法了,网上有很多例子。我这里还是简单描述下。
首先在drawable目录下,新建文件rating_bar_self_big.xml,里面的内容为
&?xml version="1.0" encoding="utf-8"?&
xmlns:android="/apk/res/android" &
android:id="@+android:id/background" android:drawable="@drawable/grade_empty_big"&&
android:id="@+android:id/secondaryProgress" android:drawable="@drawable/grade_half_big"&&
android:id="@+android:id/progress" android:drawable="@drawable/grade_full_big"&&
对应的背景,有对应的图片,希望不要搞错。
然后在values/styles文件下,新添加一个
&style name="myRatingBarBig" parent="@android:style/Widget.RatingBar"&
&item name="android:progressDrawable"&@drawable/rating_bar_self_big&/item&
&item name="android:minHeight"&60dip&/item&
&item name="android:maxHeight"&60dip&/item&
之后,就是在layout里面定义了
&RatingBar
android:id="@+id/grade"
style="@style/myRatingBarBig"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/average_grade"
android:layout_marginLeft="136dp"
android:layout_marginTop="38dp"
android:numStars="5"
android:rating="5" /&
style里面弄成自己定义的style。这样效果就出来了,效果如下图所示:
下面我放上,我用的这三个星星,以便你们可以方便的去测试:
额。。。其实第三个是一个空白图片的,是有图片的,可能这里看不出来。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:182670次
积分:3073
积分:3073
排名:第8507名
原创:94篇
转载:136篇
评论:98条求教~RatingBar如何控制星星之间的间距啊?RT~最近做一个评价UI在星星间距这里卡了很久,
圣泽瑾年002A6
自定义ratingbar,就可以了;就是你切图的时候算下两个星星的距离,然后在中间切就可以了
查看原帖>>满意请采纳
为您推荐:
其他类似问题
扫描下载二维码

我要回帖

更多关于 ratingbar 自定义间距 的文章

 

随机推荐