2017-10-17 77 views
0

我想开发评分栏像zomato android应用程序。其中评级栏框根据选择更改其颜色。如果只有一个盒子被选中,那么它的颜色是Read,并且我们逐渐选择更多的盒子变成绿色。如何开发类似zomato android app的评分栏?

这里我附zomato Android应用程序的屏幕部分的快照,显示评级正是我想开发这种类型的评级和审查制度。

enter image description here

+0

你试过这么远吗?我们看一些努力 –

+0

你尝试过什么, 这应该不会太难实现.. –

+0

我实现了利用评分栏视图 – bhavikkumar

回答

2

这是一个简单的水平的LinearLayout 9个TextViews,它们中的每具有灰色作为默认颜色。此外,您可以创建一个字符串数组,每个字符串都是一个颜色代码。这是快速和肮脏的解决方案。

单击TextView时,您可以在LinearLayout中找到它的位置,并使用数组中相应的颜色代码和选定的视图对其中的每个视图着色,其他视图保持灰色。

我用由10个部分的进度条也有类似的问题一次,而不是寻找一个图书馆中,我犯了这样的东西快速和它的工作就好了。

+0

我要写同样的事情!它不仅可以是任何视图,而且可以是Textview。 –

+0

好但我也需要在标准评级栏上进行滑动操作,以便在这种情况下给出评分我们可以如何实现。 – bhavikkumar

+0

@bhavikkumar如果你想添加刷卡它比这更复杂,你应该使用专用的组件。 –

1

我发现,我们需要做的自定义级别栏下面的解决方案波纹管代码显示自定义类评级吧。完全满足问题中提到的所有要求。

public class MyCustomRatingBar extends android.support.v7.widget.AppCompatRatingBar { 

private int[] iconArrayActive = { 
     R.drawable.ic_square_sel_1, 
     R.drawable.ic_square_sel_2, 
     R.drawable.ic_square_sel_3, 
     R.drawable.ic_square_sel_4, 
     R.drawable.ic_square_sel_5, 
     R.drawable.ic_square_sel_6, 
     R.drawable.ic_square_sel_7, 
     R.drawable.ic_square_sel_8, 
     R.drawable.ic_square_sel_9 
}; 

private int[] iconArrayInactive = { 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel, 
     R.drawable.ic_square_unsel 
}; 

public MyCustomRatingBar (Context context) { 
    super(context); 
    init(); 
} 

public MyCustomRatingBar (Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(); 
} 

public MyCustomRatingBar (Context context, AttributeSet attrs, int defStyleAttr) { 
    super(context, attrs, defStyleAttr); 
    init(); 
} 

private void init() { 
    this.setMax(9); 
    this.setNumStars(9); 
    this.setStepSize(1.0f); 
    this.setRating(1.0f); 
} 

private Bitmap getBitmapFromVectorDrawable(Context context, int drawableId) { 
    Drawable drawable = ContextCompat.getDrawable(context, drawableId); 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { 
     drawable = (DrawableCompat.wrap(drawable)).mutate(); 
    } 

    Bitmap bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), 
      drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888); 
    Canvas canvas = new Canvas(bitmap); 
    drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight()); 
    drawable.draw(canvas); 

    return bitmap; 
} 

@Override 
protected synchronized void onDraw(Canvas canvas) { 

    int stars = getNumStars(); 
    float rating = getRating(); 
    float x = 0; 

    Bitmap bitmap; 
    Paint paint = new Paint(); 
    int W = getWidth(); 
    int H = getHeight(); 
    int icon_size = (W/stars)-0; 

    int y_pos = (H/2)-icon_size/2; 

    int delta = ((H > W)?(H):(W))/(stars); 
    int offset = (W-(icon_size+(stars-1)*delta))/2; 

    for(int i = 0; i < stars; i++) { 
     if ((int) rating-1 >= i) { 
      bitmap = getBitmapFromVectorDrawable(getContext(), iconArrayActive[i]); 
     } else { 
      bitmap = getBitmapFromVectorDrawable(getContext(), iconArrayInactive[i]); 
     } 
     x = offset+(i*delta); 
     Bitmap scaled = Bitmap.createScaledBitmap(bitmap, icon_size, icon_size, true); 
     canvas.drawBitmap(scaled, x, y_pos, paint); 
     canvas.save(); 
    } 
} 

}

+0

感谢您在此分享。享受编码 –