NekoX/TMessagesProj/src/main/java/org/telegram/ui/Components/BetterRatingView.java

75 lines
2.1 KiB
Java

package org.telegram.ui.Components;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.View;
import org.telegram.messenger.AndroidUtilities;
import org.telegram.messenger.R;
import org.telegram.ui.ActionBar.Theme;
/**
* Created by grishka on 10.02.17.
*/
public class BetterRatingView extends View {
private Bitmap filledStar, hollowStar;
private Paint paint = new Paint();
private int numStars = 5;
private int selectedRating = 0;
private OnRatingChangeListener listener;
public BetterRatingView(Context context) {
super(context);
filledStar = BitmapFactory.decodeResource(getResources(), R.drawable.ic_rating_star_filled).extractAlpha();
hollowStar = BitmapFactory.decodeResource(getResources(), R.drawable.ic_rating_star).extractAlpha();
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(numStars * AndroidUtilities.dp(32) + (numStars - 1) * AndroidUtilities.dp(16), AndroidUtilities.dp(32));
}
@Override
protected void onDraw(Canvas canvas) {
for (int i = 0; i < numStars; i++) {
paint.setColor(Theme.getColor(i < selectedRating ? Theme.key_dialogTextBlue : Theme.key_dialogTextHint));
canvas.drawBitmap(i < selectedRating ? filledStar : hollowStar, i * AndroidUtilities.dp(32 + 16), 0, paint);
}
}
@Override
public boolean onTouchEvent(MotionEvent event) {
float offset = AndroidUtilities.dp(-8);
for (int i = 0; i < numStars; i++) {
if (event.getX() > offset && event.getX() < offset + AndroidUtilities.dp(32 + 16)) {
if (selectedRating != i + 1) {
selectedRating = i + 1;
if (listener != null)
listener.onRatingChanged(selectedRating);
invalidate();
break;
}
}
offset += AndroidUtilities.dp(32 + 16);
}
return true;
}
public int getRating() {
return selectedRating;
}
public void setOnRatingChangeListener(OnRatingChangeListener l) {
listener = l;
}
public interface OnRatingChangeListener {
void onRatingChanged(int newRating);
}
}