दिलचस्प पोस्ट
Ruby 1.9.3 के साथ रूबी-डीबग? रूबी के लिए "|| =" परिचालित स्टैंड क्या है कैसे आकाश चार्ट आकर्षित करने के लिए? पायथन में पाइप वर्ण विधि पैरामीटर के रूप में सी # पास लम्बा अभिव्यक्ति स्ट्रिंग सूची के सभी तत्वों को पट्टी करें सी # में एन्क्रिप्ट फ़ाइलों (विशाल डेटा) के लिए आरएसए का उपयोग कैसे करें एक अद्वितीय और नियतात्मक तरीके से, दो पूर्णांकियों को मैप करने के लिए क्या लिंकेडएचशैप मैप ऑब्जेक्ट से चाबियाँ और मूल्यों की वापसी के लिए गारंटीकृत आदेश है? JVM हॉटस्पॉट पर जावा अपवाद काउंटर socket.shutdown बनाम socket.close सभी मॉड्यूल की सूची है जो अजगर पैकेज का हिस्सा हैं? आप एक बिट को कैसे सेट, साफ़ और टॉगल करते हैं? "जादू उद्धरण" अक्षम होने के साथ, PHP / WordPress मेरे डाक डेटा को स्वतः-भागने क्यों जारी रखता है? C ++ में क्लास के सदस्यों को संदर्भित करने के लिए मैं डॉट, एरो, या डबल कॉलन का उपयोग कब करता हूं?

एंड्रॉइड रेटिंगबार स्टार के रंग बदलते हैं

मैं स्टार रंग कैसे बदल सकता हूं और मैं सितारों के आकार को कैसे बदल सकता / सकती हूं?

Solutions Collecting From Web of "एंड्रॉइड रेटिंगबार स्टार के रंग बदलते हैं"

चरण # 1: अपनी मौजूदा शैली ( $ANDROID_HOME/platforms/$SDK/data/res/values/styles.xml ) में से एक क्लोनिंग करके अपनी स्वयं की शैली बनाएं, इसे अपनी प्रोजेक्ट की styles.xmlstyles.xml और इसे संदर्भित करें जब आप एक लेआउट में विजेट जोड़ते हैं

चरण # 2: RatingBar लिए अपना खुद का RatingBar एक्सएमएल संसाधन RatingBar , बार के लिए उपयोग करने के लिए उपयुक्त छवियों को इंगित करता है मूल शैली आपको उन मौजूदा संसाधनों के बारे में बताएगी, जिनके साथ आप तुलना कर सकते हैं। फिर, अंतर्निहित वाले के बजाय, अपने स्वयं के LayerDrawable संसाधनों का उपयोग करने के लिए अपनी शैली को समायोजित करें

यह उल्लिखित ब्लॉग पर थोड़ा जटिल है, मैंने एक समान लेकिन सरल तरीके से उपयोग किया है। आपको 3 स्टार छवियों की ज़रूरत है (लाल_स्टार_पूर्ण लिंक, लाल_स्टार_हॉफ़ ..png और लाल_स्टार_स्वीपी।) और एक एक्सएमएल, ये सब है।

इन 3 छवियों को रेस / ड्रॉएबल पर रखें।

निम्नलिखित रेटिंगबार_्रेड.एक्सएमएल को डाल दें:

 <?xml version="1.0" encoding="UTF-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@android:id/background" android:drawable="@drawable/red_star_empty" /> <item android:id="@android:id/secondaryProgress" android:drawable="@drawable/red_star_half" /> <item android:id="@android:id/progress" android:drawable="@drawable/red_star_full" /> </layer-list> 

और, आखिरकार, अपने रेटिंगबार परिभाषा को इसका इस्तेमाल करने के लिए कहें, अर्थात्

 <RatingBar android:progressDrawable="@drawable/ratingbar_red"/> 

बस।

यह कोशिश करें, यदि आप केवल रंग बदलना चाहते हैं:

 RatingBar ratingBar = (RatingBar) findViewById(R.id.ratingBar); LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); stars.getDrawable(2).setColorFilter(Color.YELLOW, PorterDuff.Mode.SRC_ATOP); 

2015 अद्यतन

अब आप ड्रॉएबल कॉम्प्पट का उपयोग सभी प्रकार के डिज़ायर के लिए कर सकते हैं। उदाहरण के लिए:

 Drawable progress = ratingBar.getProgressDrawable(); DrawableCompat.setTint(progress, Color.WHITE); 

यह एपीआई 4 तक पीछे की ओर संगत है

सबसे आसान तरीका है कि मेरे लिए काम किया … अगर आप AppCompat गतिविधि को बढ़ा रहे हैं

अपने build.gradle में नवीनतम ऐपकम्पेट लाइब्रेरी जोड़ें।

 dependencies { compile 'com.android.support:appcompat-v7:XXX' // where XXX version } 

अपनी गतिविधि को android.support.v7.app.AppCompatActivity बढ़ाएं

 public class MainActivity extends AppCompatActivity { ... } 

अपने styles.xml फ़ाइल में कस्टम शैली की घोषणा करें।

 <style name="RatingBar" parent="Theme.AppCompat"> <item name="colorControlNormal">@color/indigo</item> <item name="colorControlActivated">@color/pink</item> </style> 

इस शैली को एंड्रॉइड के माध्यम से अपने रेटिंग बोर्ड पर लागू करें: थीम विशेषता

 <RatingBar android:theme="@style/RatingBar" android:rating="3" android:stepSize="0.5" android:numStars="5" android:layout_width="wrap_content" android:layout_height="wrap_content"/> 

यदि आप सभी सितारों के लिए रंग बदलना चाहते हैं तो आप मेरा उपयोग बताते हैं:

 LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); stars.getDrawable(2).setColorFilter(getResources().getColor(R.color.starFullySelected), PorterDuff.Mode.SRC_ATOP); stars.getDrawable(1).setColorFilter(getResources().getColor(R.color.starPartiallySelected), PorterDuff.Mode.SRC_ATOP); stars.getDrawable(0).setColorFilter(getResources().getColor(R.color.starNotSelected), PorterDuff.Mode.SRC_ATOP); 

समाधान जो एलेक्स और कॉमन्सवेयर पोस्ट किए गए हैं, वे सही हैं। एक बात यह है कि एंड्रॉइड हालांकि इसके बारे में बात नहीं करता है, लेकिन विभिन्न घनत्व के लिए उचित पिक्सेल आकार है। प्रभामंडल प्रकाश पर आधारित प्रत्येक घनत्व के लिए आवश्यक आयाम यहां दिए गए हैं।

छोटा सितारा

 mdpi: 16px hdpi: 24px xhdpi: 32px xxhdpi: 48px 

मध्यम स्टार

 mdpi: 24px hdpi: 36px xhdpi: 48px xxhdpi: 72px 

बड़े स्टार

 mdpi: 35px hdpi: 52px xhdpi: 69px xxhdpi: 105px 

एपीआई 21 से इस तीन पंक्तियों के साथ सितारों का रंग बदलने के लिए बहुत आसान है:

 android:progressTint="@android:color/holo_red_dark" android:progressBackgroundTint="@android:color/holo_red_dark" android:secondaryProgressTint="@android:color/holo_red_dark" 

ऐसा करने से, आप पृष्ठभूमि रंग और सितारों की सीमा का रंग बदलते हैं।

इसलिए मैं दो घंटे के लिए इस मुद्दे के साथ संघर्ष कर रहा हूं और मैं सभी एपीआई संस्करणों के लिए काम कर रहे समाधान के साथ आया हूं, जहां आधे सितारे रेटिंग भी दिखाए जाते हैं।

 private void setRatingStarColor(Drawable drawable, @ColorInt int color) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { DrawableCompat.setTint(drawable, color); } else { drawable.setColorFilter(color, PorterDuff.Mode.SRC_IN); } } 

आप उपायों के इस आदेश के साथ विधि को बुलाते हैं:

  LayerDrawable stars = (LayerDrawable) ratingBar.getProgressDrawable(); // Filled stars setRatingStarColor(stars.getDrawable(2), ContextCompat.getColor(getContext(), R.color.foreground)); // Half filled stars setRatingStarColor(stars.getDrawable(1), ContextCompat.getColor(getContext(), R.color.background)); // Empty stars setRatingStarColor(stars.getDrawable(0), ContextCompat.getColor(getContext(), R.color.background)); 

नोट: इसके अलावा आपको एक्सएमएल में "मैक्स" और "नॉनस्टार्स" विशेषताओं को निर्दिष्ट करना होगा, नहीं तो आधे सितारे दिखाई नहीं देंगे।

अब आप DrawableCompat को AppCompat v22.1.0 से आगे के सभी प्रकार के डिएबिलिटि के लिए डायनेमिक रूप से टिंट कर सकते हैं, जब आप ड्रॉएबल के एक सेट के साथ कई थीम का समर्थन कर रहे हैं। उदाहरण के लिए:

 LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable(); DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(0)), Color.RED); // Empty star DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), Color.GREEN); // Partial star DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), Color.BLUE); // Full star 

यह पीछे की तरफ एपीआई 4 के साथ संगत है। साथ ही क्रिस बैन्स का ब्लॉग लाइब्रेरीज़ v22.1.0 पर भी देखें

वास्तविक आकार और आकार के लिए आपको उचित आकार के लिए एक नई शैली और परत-सूची ड्रॉएबल को परिभाषित करने की आवश्यकता होगी, क्योंकि अन्य ने पहले ही ऊपर दिए उत्तर दिया है

बस एक्सएमएल से रेटिंग बार का रंग बदलने के लिए: –

 android:progressTint="@color/your_color" android:backgroundTint="@color/your_color" android:secondaryProgressTint="@color/your_color" 

android:theme प्रयोग करें android:theme विशेषता:

styles.xml

 <style name="Theme.Rating" parent="Theme.AppCompat.Light"> <item name="colorAccent">@color/rating</item> </style> 

layout.xml

 <android.support.v7.widget.AppCompatRatingBar android:theme="@style/Theme.Rating" android:numStars="5" android:layout_width="wrap_content" android:layout_height="wrap_content" /> 

रंग बदलने के लिए आपको सिर्फ एंड्रॉइड पैरामीटर सेट करना है: प्रगति का निशान

  <RatingBar android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_marginTop="15dp" android:numStars="5" android:rating="1" android:progressTint="@android:/color/black" android:layout_gravity="center" /> 

आकार के लिए शैली संपत्ति

बिल्डिंग @ lgvalle का उत्तर

2015 अद्यतन

अब आप ड्रॉएबल कॉम्प्पट का उपयोग सभी प्रकार के डिज़ायर के लिए कर सकते हैं। उदाहरण के लिए:

ड्रॉइंग प्रगति = रेटिंगबार.गेटप्रग्रासड्रॉटेबल (); DrawableCompat.setTint (प्रगति, रंग। WHITE); यह एपीआई 4 तक पीछे की ओर संगत है

 LayerDrawable drawable = (LayerDrawable) getProgressDrawable(); Drawable progress = drawable.getDrawable(2); DrawableCompat.setTint(progress, getResources().getColor(COLOR1)); progress = drawable.getDrawable(1); DrawableCompat.setTintMode(progress, PorterDuff.Mode.DST_ATOP); DrawableCompat.setTint(progress, getResources().getColor(COLOR1)); DrawableCompat.setTintMode(progress, PorterDuff.Mode.SRC_ATOP); DrawableCompat.setTint(progress, getResources().getColor(COLOR2)); progress = drawable.getDrawable(0); DrawableCompat.setTint(progress, getResources().getColor(COLOR2)); 

यह अंश चरण रंग रखता है

 <!--For rating bar --> <style name="RatingBarfeed" parent="Theme.AppCompat"> <item name="colorControlNormal">@color/colorPrimary</item> <item name="colorControlActivated">@color/colorPrimary</item> </style> 

अपने रंग का उपयोग करें

Withou एक नई शैली जोड़ने आप RatingBar भीतर रंग का रंग का उपयोग कर सकते हैं

  <RatingBar android:id="@+id/ratingBar" style="@android:style/Widget.Holo.RatingBar.Small" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:rating="4.5" android:stepSize="0.5" android:progressTint="@color/colorPrimary"/> 

मैं इस मुद्दे को हल करता हूं:

 LayerDrawable layerDrawable = (LayerDrawable) ratingBar.getProgressDrawable(); DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(0)), Color.WHITE); // Empty star DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(1)), Color.YELLOW); // Partial star DrawableCompat.setTint(DrawableCompat.wrap(layerDrawable.getDrawable(2)), Color.YELLOW); 
 RatingBar mRating=(RatingBar)findViewById(R.id.rating); LayerDrawable layerDrawable=(LayerDrawable)mRating.getProgressDrawable(); layerDrawable.getDrawable(2).setColorFilter(Color.parseColor ("#32CD32"), PorterDuff.Mode.SRC_ATOP); 

मेरे लिए यह काम कर रहा है ….

एंड्रॉइड के लिए एंड्रॉइड के लिए काम करता है नीचे संस्करण 21

कुछ शोध के बाद मैं पृष्ठभूमि पद्धति को सेट करने के लिए इस पद्धति के साथ आया हूं, अंतर का आकार (उदा: आधा सितारा) और स्टार टिंट रंग।

 LayerDrawable layers = (LayerDrawable) ratingBar.getProgressDrawable(); DrawableCompat.setTint(layers.getDrawable(0), 0x33000000); // The background tint DrawableCompat.setTint(layers.getDrawable(1), 0x00000000); // The gap tint (Transparent in this case so the gap doesnt seem darker than the background) DrawableCompat.setTint(layers.getDrawable(2), 0xffFED80A); // The star tint 

आपके विषय के अनुसार स्टार का रंग बदलने के लिए मुझे एक सरल समाधान मिला।

इस साइट पर जाएं : http://android-holo-colors.com/

अपना थीम रंग चुनें और अपना स्टार इमेज बनवाएं।

ऊपर दिए गए उत्तरों का उपयोग करके, मैंने एक त्वरित स्थिर विधि बनाया है जिसे आसानी से फिर से उपयोग किया जा सकता है। यह केवल सक्रिय सितारों के लिए प्रगति रंग को टिनट करना है जो सितारें सक्रिय नहीं हैं वे ग्रे हैं।

  public static RatingBar tintRatingBar (RatingBar ratingBar, int progressColor)if (ratingBar.getProgressDrawable() instanceof LayerDrawable) { LayerDrawable progressDrawable = (LayerDrawable) ratingBar.getProgressDrawable(); Drawable drawable = progressDrawable.getDrawable(2); Drawable compat = DrawableCompat.wrap(drawable); DrawableCompat.setTint(compat, progressColor); Drawable[] drawables = new Drawable[3]; drawables[2] = compat; drawables[0] = progressDrawable.getDrawable(0); drawables[1] = progressDrawable.getDrawable(1); LayerDrawable layerDrawable = new LayerDrawable(drawables); ratingBar.setProgressDrawable(layerDrawable); return ratingBar; } else { Drawable progressDrawable = ratingBar.getProgressDrawable(); Drawable compat = DrawableCompat.wrap(progressDrawable); DrawableCompat.setTint(compat, progressColor); ratingBar.setProgressDrawable(compat); return ratingBar; } } 

बस अपनी रेटिंग बार और getResources().getColor(R.color.my_rating_color) का उपयोग कर एक रंग पास करें getResources().getColor(R.color.my_rating_color)

जैसा कि आप देख सकते हैं, मैं ड्रॉरेक कॉम्पैट का उपयोग करता हूं, इसलिए यह पिछड़े संगत है।

संपादित करें: यह विधि API21 पर काम नहीं करती है (आंकड़े क्यों जाएं) SetProgressBar को कॉल करते समय आप एक NullPointerException के साथ समाप्त होते हैं मैंने एपीआई> 21 = पर पूरी पद्धति को अक्षम कर दिया

एपीआई> = 21 के लिए, मैं सुपरपरपुसियो समाधान का उपयोग करता हूं।

1) इस XML को घोषित करें

 <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:orientation="horizontal" android:paddingLeft="20dp" android:paddingRight="20dp" android:layout_marginBottom="20dp" android:background="#323232" android:gravity="center_horizontal"> <com.example.android.custom_ratingbar.CustomRatingBar android:id="@+id/coloredRatingBar5" style="@style/coloredRatingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="match_parent" /> </LinearLayout> 

2) style.xml में

 <style name="coloredRatingBarStyleSmall"> <item name="indicator">false</item> <item name="type">small</item> </style> 

3)

 import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.util.AttributeSet; import android.view.MotionEvent; import android.view.View; public class CustomRatingBar extends View{ private static final String TAG="ColoredRatingBar"; private static final int NORMAL = 0; private static final int SMALL = 1; Bitmap[] drawables; Bitmap progressBackground; Context mContext; private int mNumStars =9; private float mRating =0; private boolean mIndicator; private float slidePosition; private int mType; /** * A callback that notifies clients when the rating has been changed. This * includes changes that were initiated by the user through a touch gesture * or arrow key/trackball as well as changes that were initiated * programmatically. */ public interface OnRatingBarChangeListener { /** * Notification that the rating has changed. Clients can use the * fromUser parameter to distinguish user-initiated changes from those * that occurred programmatically. This will not be called continuously * while the user is dragging, only when the user finalizes a rating by * lifting the touch. * * @param ratingBar The RatingBar whose rating has changed. * @param rating The current rating. This will be in the range * 0..numStars. * @param fromUser True if the rating change was initiated by a user's * touch gesture or arrow key/horizontal trackbell movement. */ void onRatingChanged(CustomRatingBar ratingBar, float rating, boolean fromUser); } private OnRatingBarChangeListener mOnRatingBarChangeListener; public CustomRatingBar(Context context) { this(context, null); } public CustomRatingBar(Context context, AttributeSet attrs) { this(context, attrs,0);//R.attr.coloredRatingBarStyle } public CustomRatingBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomRatingBar,defStyle, 0); final boolean indicator = a.getBoolean(R.styleable.CustomRatingBar_indicator, false); final float rating = a.getFloat(R.styleable.CustomRatingBar_setrating, -1); final int type = a.getInt(R.styleable.CustomRatingBar_type, 0); a.recycle(); setIndicator(indicator); setRating(rating); setType(type); init(context); } public int getType() { return mType; } public void setType(int type) { this.mType = type; } private void init(Context context) { mContext = context; Resources res = getResources(); if(mType==SMALL){ drawables = new Bitmap[]{BitmapFactory.decodeResource(res, R.drawable.rating_inactive),BitmapFactory.decodeResource(res, R.drawable.rating_active)}; progressBackground = BitmapFactory.decodeResource(res, R.drawable.rating_inactive); }else{ drawables = new Bitmap[]{BitmapFactory.decodeResource(res, R.drawable.rating_inactive),BitmapFactory.decodeResource(res, R.drawable.rating_active)}; progressBackground = BitmapFactory.decodeResource(res, R.drawable.rating_inactive); } } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //draw empty stars bg for(int i=0;i< mNumStars;i++){ drawStar(canvas,i); } } private void drawStar(Canvas canvas, int position) { float fraction = mRating -(position); Bitmap ratedStar1 = getRatedStar(); Paint paint=getPaint(position); int division=getSize(); Bitmap ratedStar=null; Bitmap emptyStar=null; if(!isInEditMode()){ ratedStar=Bitmap.createScaledBitmap(ratedStar1, division, division, false); emptyStar=Bitmap.createScaledBitmap(progressBackground, division, division, false); } if((position)< mRating){ if(!isInEditMode()){ canvas.drawBitmap(ratedStar,(position* division),0,paint); } } else{ if(!isInEditMode()){ canvas.drawBitmap(emptyStar,(position*division),0,null); } } } private int getSize(){ return (getWidth()/mNumStars); } private Bitmap getRatedStar() { if(mRating==0){ return drawables[0]; } else{ return drawables[1]; } } private Paint getPaint(int position){ int value=(255*(position+1))/mNumStars; String hexString=Integer.toHexString(value).equals("0")?"00":Integer.toHexString(value); String hexvalue="#"+hexString+"000000";//FEE98E //Log.e("TAG", position+"/"+value+"/"+hexvalue); Paint paint=new Paint(); paint.setColor(Color.parseColor(hexvalue)); return paint; } public int getNumStars() { return mNumStars; } public void setNumStars(int numStars) { this.mNumStars = numStars; } public float getRating() { return mRating; } public void setRating(float rating) { setRating(rating,false); } void setRating(float rating,boolean fromUser) { if(rating>mNumStars){ this.mRating = mNumStars; } this.mRating = rating; invalidate(); dispatchRatingChange(fromUser); } public boolean isIndicator() { return mIndicator; } public void setIndicator(boolean indicator) { this.mIndicator = indicator; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); if (progressBackground != null) { final int width = progressBackground.getWidth() * mNumStars; final int height = progressBackground.getHeight(); int widthSize = MeasureSpec.getSize(widthMeasureSpec); Bitmap emptyStar=Bitmap.createScaledBitmap(progressBackground, widthSize/mNumStars, widthSize/mNumStars, false); int heightSize = emptyStar.getHeight(); setMeasuredDimension(resolveSizeAndState(widthSize, widthMeasureSpec, 0), resolveSizeAndState(heightSize, heightMeasureSpec, 0)); } else{ int desiredWidth = 100; int desiredHeight = 50; int widthMode = MeasureSpec.getMode(widthMeasureSpec); int widthSize = MeasureSpec.getSize(widthMeasureSpec); int heightMode = MeasureSpec.getMode(heightMeasureSpec); int heightSize = MeasureSpec.getSize(heightMeasureSpec); int width; int height; //Measure Width if (widthMode == MeasureSpec.EXACTLY) { //Must be this size width = widthSize; } else if (widthMode == MeasureSpec.AT_MOST) { //Can't be bigger than... width = Math.min(desiredWidth, widthSize); } else { //Be whatever you want width = desiredWidth; } //Measure Height if (heightMode == MeasureSpec.EXACTLY) { //Must be this size height = heightSize; } else if (heightMode == MeasureSpec.AT_MOST) { //Can't be bigger than... height = Math.min(desiredHeight, heightSize); } else { //Be whatever you want height = desiredHeight; } //MUST CALL THIS setMeasuredDimension(resolveSizeAndState(width, widthMeasureSpec, 0),resolveSizeAndState(height, heightMeasureSpec, 0)); } } @Override public boolean onTouchEvent(MotionEvent event) { if(mIndicator){ return false; } int action = event.getAction(); switch (action) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_MOVE: case MotionEvent.ACTION_UP: slidePosition = getRelativePosition(event.getX()); int newRating = (int)(slidePosition>0?slidePosition+1:0) ; if(newRating>mNumStars){ newRating=mNumStars; } // Log.e("TAG", ""+newRating); if (newRating != mRating) { setRating(newRating,true); } break; case MotionEvent.ACTION_CANCEL: break; default: break; } return true; } private float getRelativePosition(float x) { Bitmap emptyStar=Bitmap.createScaledBitmap(progressBackground, getWidth()/mNumStars, getWidth()/mNumStars, false); int widthSize = emptyStar.getWidth(); // Log.e("TAG", widthSize+"/"+x); float position = x / widthSize; position = Math.max(position, 0); return Math.min(position, mNumStars); } /** * Sets the listener to be called when the rating changes. * * @param listener The listener. */ public void setOnRatingBarChangeListener(OnRatingBarChangeListener listener) { mOnRatingBarChangeListener = listener; } /** * @return The listener (may be null) that is listening for rating change * events. */ public OnRatingBarChangeListener getOnRatingBarChangeListener() { return mOnRatingBarChangeListener; } void dispatchRatingChange(boolean fromUser) { if (mOnRatingBarChangeListener != null) { mOnRatingBarChangeListener.onRatingChanged(this, getRating(), fromUser); } } } 5) then in calling activity--- CustomRatingBar coloredRatingBar5=(CustomRatingBar)findViewById(R.id.coloredRatingBar5); coloredRatingBar5.setOnRatingBarChangeListener(new OnRatingBarChangeListener() { @Override public void onRatingChanged(CustomRatingBar ratingBar, float rating,boolean fromUser) { // TODO Auto-generated method stub Log.e("RATING", ""+rating); } }); 

6) रेटिंग सक्रिय — काले रंग coz के साथ किसी भी छवि ले लो यह अलग दर्ज़ा के लिए रंग पारदर्शिता के रूप में इस्तेमाल किया जाएगा

rating_inactive – हल्की पृष्ठभूमि के साथ उपरोक्त छवि के एक ही आकार की कोई भी छवि ले लीजिए .. जब कोई रेटिंग नहीं चुने जाने पर इसका उपयोग किया जाएगा

सितारों की सीमा रंग बदलने का एक बहुत आसान तरीका xml पैरामीटर का उपयोग कर रहा है:

 android:progressBackgroundTint="" 

रेटिंग में बियर दृश्य। मान रंग के लिए हेक्साडेसिमल कोड होना चाहिए।

मैं कम से कम एपीआई 9 तक इस तरह से नीचे करने के लिए एक विश्वसनीय तरीका तलाश रहा था "लेयर ड्रॉउलेशन टू कास्टिंग" समाधान मेरे लिए एक जोखिम भरा समाधान जैसा लग रहा था, और जब मैंने इसे एंड्रॉइड फोन पर 2.3 पर परीक्षण किया, तो इसे सफलतापूर्वक हटा दिया गया, लेकिन DrawableCompat.SsetTint को कॉल (…) का कोई प्रभाव नहीं था

ड्रॉएबल परिसंपत्तियों को लोड करने की आवश्यकता मेरे लिए एक अच्छा समाधान की तरह नहीं लगती थी।

मैंने अपना खुद का समाधान करने का निर्णय लिया, जो एक क्लास है जिसे ऐप्लिकॉप्टट्रेटिंग ब्रार का विस्तार किया जा रहा है, जिससे कस्टम ड्रॉएबल सितारों को प्रोग्रामेटिक रूप से चित्रित करने का ध्यान रखता है। यह मेरी ज़रूरतों के लिए पूरी तरह से काम करता है, मैं उसे पोस्ट कर दूँगा अगर यह किसी को मदद करता है:

https://gist.github.com/androidseb/2b8044c90a07c7a52b4bbff3453c8460

यह लिंक आसान है क्योंकि आप पूरी फाइल सीधे प्राप्त कर सकते हैं, लेकिन यहां सिर्फ पूर्ण कोड है:

 import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.ColorFilter; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Path; import android.graphics.PointF; import android.graphics.drawable.Drawable; import android.support.v7.widget.AppCompatRatingBar; import android.util.AttributeSet; /** * @author androidseb * <p/> * Extends AppCompatRatingBar with the ability to tint the drawn stars when selected, pressed and un-selected. * Limitation: Only draws full stars. */ public class TintableRatingBar extends AppCompatRatingBar { private TintableRatingBarProgressDrawable progressDrawable; public TintableRatingBar(final Context context) { super(context); init(); } public TintableRatingBar(final Context context, final AttributeSet attrs) { super(context, attrs); init(); } public TintableRatingBar(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init() { progressDrawable = new TintableRatingBarProgressDrawable(); setProgressDrawable(progressDrawable); } public void setCustomTintColors(final int _uncheckedColor, final int _pressedColor, final int _checkedColor) { progressDrawable.setRatingMaxLevelValue(getMax() * 1000); progressDrawable.setUnCheckedColor(_uncheckedColor); progressDrawable.setPressedColor(_pressedColor); progressDrawable.setCheckedColor(_checkedColor); invalidate(); } public class TintableRatingBarProgressDrawable extends Drawable { private static final int STAR_COUNT = 5; private static final int STAR_BRANCHES_COUNT = 5; /** Sets the max level value: if the level is at the max, then all stars are selected. */ private int ratingMaxLevelValue = 10000; /** Color to be painted for unselected stars */ private int uncheckedColor = Color.GRAY; /** Color to be painted for unselected stars when the ratingbar is pressed */ private int pressedColor = Color.CYAN; /** Color to be painted for selected stars */ private int checkedColor = Color.BLUE; @Override public void setAlpha(final int _i) { } @Override public void setColorFilter(final ColorFilter _colorFilter) { } @Override public boolean isStateful() { return true; } @Override public boolean setState(final int[] stateSet) { final boolean res = super.setState(stateSet); invalidateSelf(); return res; } @Override public int getOpacity() { return 255; } public void setRatingMaxLevelValue(final int _ratingMaxLevelValue) { ratingMaxLevelValue = _ratingMaxLevelValue; } public void setUnCheckedColor(final int _uncheckedColor) { uncheckedColor = _uncheckedColor; } public void setPressedColor(final int _pressedColor) { pressedColor = _pressedColor; } public void setCheckedColor(final int _checkedColor) { checkedColor = _checkedColor; } @Override public void draw(final Canvas _canvas) { boolean pressed = false; for (int i : getState()) { if (i == android.R.attr.state_pressed) { pressed = true; } } final int level = (int) Math.ceil(getLevel() / (double) ratingMaxLevelValue * STAR_COUNT); final int starRadius = Math.min(getBounds().bottom / 2, getBounds().right / STAR_COUNT / 2); for (int i = 0; i < STAR_COUNT; i++) { final int usedColor; if (level >= i + 1) { usedColor = checkedColor; } else if (pressed) { usedColor = pressedColor; } else { usedColor = uncheckedColor; } drawStar(_canvas, usedColor, (i * 2 + 1) * starRadius, getBounds().bottom / 2, starRadius, STAR_BRANCHES_COUNT); } } private void drawStar(final Canvas _canvas, final int _color, final float _centerX, final float _centerY, final float _radius, final int _branchesCount) { final double rotationAngle = Math.PI * 2 / _branchesCount; final double rotationAngleComplement = Math.PI / 2 - rotationAngle; //Calculating how much space is left between the bottom of the star and the bottom of the circle //In order to be able to center the star visually relatively to the square when drawn final float bottomOffset = (float) (_radius - _radius * Math.sin(rotationAngle / 2) / Math.tan( rotationAngle / 2)); final float actualCenterY = _centerY + (bottomOffset / 2); final Paint paint = new Paint(); paint.setColor(_color); paint.setStyle(Style.FILL); final Path path = new Path(); final float relativeY = (float) (_radius - _radius * (1 - Math.sin(rotationAngleComplement))); final float relativeX = (float) (Math.tan(rotationAngle / 2) * relativeY); final PointF a = new PointF(-relativeX, -relativeY); final PointF b = new PointF(0, -_radius); final PointF c = new PointF(relativeX, -relativeY); path.moveTo(_centerX + ax, actualCenterY + ay); _canvas.save(); for (int i = 0; i < _branchesCount; i++) { path.lineTo(_centerX + bx, actualCenterY + by); path.lineTo(_centerX + cx, actualCenterY + cy); rotationToCenter(b, rotationAngle); rotationToCenter(c, rotationAngle); } _canvas.drawPath(path, paint); _canvas.restore(); } private void rotationToCenter(final PointF _point, final double _angleRadian) { final float x = (float) (_point.x * Math.cos(_angleRadian) - _point.y * Math.sin(_angleRadian)); final float y = (float) (_point.x * Math.sin(_angleRadian) + _point.y * Math.cos(_angleRadian)); _point.x = x; _point.y = y; } } } 

थोड़ी देर के उत्तर पर मुझे आशा है कि यह कुछ लोगों को मदद करेगा।

 <RatingBar android:id="@+id/rating" style="@style/Base.Widget.AppCompat.RatingBar.Small" android:theme="@style/WhiteRatingStar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/profil_name" android:layout_centerHorizontal="true" android:layout_marginLeft="@dimen/dimen_4" android:rating="3" /> 

And here is what the WhiteRatingStar looks like

 <style name="WhiteRatingStar" parent="Base.Widget.AppCompat.RatingBar.Small"> <item name="colorAccent">@android:color/white</item> </style> 

With this the stars will be coloured in white for example.

The simpliest way:

 android:progressTint="@color/color" 

Just edit or add

 <color name="colorAccent">#3b71c7</color> 

in your resource value folder

As the previous answer implies, it is not easy to change the color of the ratingbar. The stars are not programmatically drawn, they are images with fixed size and specific color gradients. To change the color you have to create your own star images with different colors then proceed to create your own drawable XML resource and pass it to the ratingsBar class using setProgressDrawable(Drawable d) or XML attribute android:progressDrawable.

The rating bar is used automatically at run time for change color on touch star.

First add style in app\src\main\res\values\styles.xml file:

 <style name="RatingBar" parent="Theme.AppCompat"> <item name="colorControlNormal">@android:color/darker_gray</item> <item name="colorControlActivated">@color/com_facebook_blue</item> </style> 

Then your rating bar add theme like this:

 <RatingBar android:id="@+id/rating" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize="1" android:theme="@style/RatingBar"/>