评级棒的明星之间的间距? [英] Spacing between the stars of a rating bar?

查看:130
本文介绍了评级棒的明星之间的间距?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

浩,我可以设置一个间隔beween星星呢?这就是我的RatingBar:

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));

布局:

<?xml version="1.0" encoding="utf-8"?>
<RatingBar xmlns:android="http://schemas.android.com/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>
 </style>

谢谢,欢呼声

Thanks, cheers

推荐答案

您必须将填充添加到PNG本身。虽然有一些被称为插图绘制对象(http://developer.android.com/guide/topics/resources/drawable-resource.html#Inset),你可以换你的绘制而成,其code为'tileify -ing(如Android源$ C ​​$ C简称)不处理的绘制作为一个插图绘制的情况下,因此不平铺图像。

You have to add the padding to the png itself. While there is something known as an Inset Drawable (http://developer.android.com/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.

下面是tilefy方法(在ProgressBar.java,这是祖先RatingBar.java:<一href="https://gist.github.com/CyanogenMod/android_frameworks_base/blob/gingerbread/core/java/android/widget/ProgressBar.java" rel="nofollow">https://gist.github.com/CyanogenMod/android_frameworks_base/blob/gingerbread/core/java/android/widget/ProgressBar.java)

Here's the tilefy method (in ProgressBar.java, which is the ancestor to RatingBar.java: https://gist.github.com/CyanogenMod/android_frameworks_base/blob/gingerbread/core/java/android/widget/ProgressBar.java)

private Drawable tileify(Drawable drawable, boolean clip) {

    if (drawable instanceof LayerDrawable) {
        LayerDrawable background = (LayerDrawable) drawable;
        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) drawable;
        StateListDrawable out = new StateListDrawable();
        int numStates = in.getStateCount();
        for (int i = 0; i < numStates; i++) {
            out.addState(in.getStateSet(i), tileify(in.getStateDrawable(i), clip));
        }
        return out;

    } else if (drawable instanceof BitmapDrawable) {
        final Bitmap tileBitmap = ((BitmapDrawable) drawable).getBitmap();
        if (mSampleTile == null) {
            mSampleTile = tileBitmap;
        }

        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) : shapeDrawable;
    }

    return drawable;
}

这篇关于评级棒的明星之间的间距?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆