Я нашел более простое решение, чем я думаю, приведенное выше, и проще, чем собственное. Я просто создал небольшую рейтинговую панель и добавил к ней onTouchListener. Оттуда я вычисляю ширину клика и определяю количество звезд из этого. Воспользовавшись этим несколько раз, я обнаружил единственную причуду, заключающуюся в том, что рисование маленькой строки рейтинга не всегда получается правильным в таблице, если я не заключаю ее в LinearLayout (выглядит прямо в редакторе, но не на устройстве) , Во всяком случае, в моем макете:
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<RatingBar
android:id="@+id/myRatingBar"
style="?android:attr/ratingBarStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:numStars="5" />
</LinearLayout>
и в рамках моей деятельности:
final RatingBar minimumRating = (RatingBar)findViewById(R.id.myRatingBar);
minimumRating.setOnTouchListener(new OnTouchListener()
{
public boolean onTouch(View view, MotionEvent event)
{
float touchPositionX = event.getX();
float width = minimumRating.getWidth();
float starsf = (touchPositionX / width) * 5.0f;
int stars = (int)starsf + 1;
minimumRating.setRating(stars);
return true;
}
});
Я надеюсь, что это помогает кому-то еще. Определенно проще, чем рисовать свои собственные (хотя я обнаружил, что это тоже работает, но я просто хотел легко использовать звезды).