2017-10-17 4 views
0

私はzomato androidアプリケーションのような評価バーを開発したいと思います。レーティングバーボックスは選択に従って色を変えます。 1つのボックスだけが選択されている場合、その色は読み取りであり、徐々に我々はより多くのボックスを選択して緑色になります。ここでzomato android appのような評価バーのようなボックスを開発するには?

私はまさに私が評価とレビューこのタイプのシステムを開発したいと考えて評価を示しているzomato Androidアプリのスクリーン部分のスナップを取り付けました。 9 TextViews持つ単純な水平のLinearLayoutだ

enter image description here

+0

?私は標準を使用してウズウズ与えるためにサンプルを開発し、インターネットの助けを使う –

+0

私たちにいくつかの努力を示し、評価バー私は星と正方形のボックスを置き換えることができますが、私はどのように評価値の変化に応じて色を変更することを理解することはできません。代わりにレーティングバーの –

+0

。これは、実装があまりにも難しいことではありませんあなたは試してみましたが、 – bhavikkumar

答えて

2

、それらの各々は、既定の色として灰色を有します。さらに、文字列の配列を作成できます。各文字列はカラーコードです。これは迅速かつ汚れた解決策です。

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

ここで共有していただきありがとうございます。コーディングをお楽しみください –

関連する問題