2010-11-18 14 views
5

ho mogę ustawić odstęp pomiędzy gwiazdami? Ów mojego ratingbar:Odstęp między gwiazdami na pasku oceny?

ratingBar = (RatingBar) inflater.inflate(R.layout.ratingbar, null); 
ratingBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

układ:

<?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> 

Styl:

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

Dzięki, Pozdrawiam

+0

Możesz spróbować dodać dopełnienie do samego obrazu, dodając przezroczyste obramowanie po prawej stronie. –

+0

Rozwiązałeś to? –

Odpowiedz

3

Trzeba dodać dopełnienie do samego png. Chociaż istnieje coś takiego jak Inset Drawable (http://developer.android.com/guide/topics/resources/drawable-resource.html#Inset), w którym można zawijać swoje rysunki, kod dla 'tileify'-ing (o którym mowa w androidowym kodzie źródłowym) nie radzi sobie z przypadkiem drawable będącym inset drawable, a więc nie tnie obrazu.

Oto metoda tilefy (w ProgressBar.java, który jest przodkiem 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; 
} 
+3

Twój wpis jest nieco mylący - czy to możliwe bez modyfikowania png, czy nie? Czy metoda tileify rozwiązuje to? Jak dodać dopełnienie? Jeśli nie, po co to publikujesz? – Ixx

0

Nie ma prosty sposób zmodyfikować padding między obrazami, lepiej zaoszczędzić czas i po prostu dodać kilka miejsce z dowolnym dostępnym edytorem obrazów.

Powiązane problemy