2010-11-18 16 views
5

Tôi có thể đặt khoảng cách giữa các ngôi sao không? Thats ratingbar tôi:Khoảng cách giữa các dấu sao của một thanh đánh giá?

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

Cách bố trí:

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

Phong cách:

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

Cảm ơn, cổ vũ

+0

Bạn có thể thử thêm một phần đệm vào hình ảnh, bằng cách thêm một số đường viền trong suốt ở bên phải. –

+0

Bạn đã giải quyết vấn đề này chưa? –

Trả lời

3

Bạn phải thêm đệm vào png riêng của mình. Mặc dù có một cái gì đó được gọi là Inset Drawable (http://developer.android.com/guide/topics/resources/drawable-resource.html#Inset) mà bạn có thể bao gồm drawable của mình vào, mã cho 'tileify'-ing (như được đề cập trong mã nguồn Android) không xử lý trường hợp có thể vẽ được là một hình chữ cái có thể vẽ được và do đó không gạch hình ảnh.

Dưới đây là phương pháp tilefy (trong ProgressBar.java, đó là tổ tiên để 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

Bài đăng của bạn hơi khó hiểu - có thể thay đổi png hay không? Phương thức tileify có giải quyết được không? Làm thế nào để thêm đệm với nó? Nếu không, tại sao bạn đăng nó? – Ixx

0

Không có cách nào đơn giản để thay đổi đệm giữa các hình ảnh, tốt hơn tiết kiệm thời gian và chỉ cần thêm một số không gian với bất kỳ trình chỉnh sửa hình ảnh có sẵn nào.

Các vấn đề liên quan