session-android/src/org/thoughtcrime/securesms/components/HourglassView.java
2019-07-24 12:30:23 +10:00

85 lines
2.9 KiB
Java

package org.thoughtcrime.securesms.components;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffColorFilter;
import android.graphics.PorterDuffXfermode;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import network.loki.messenger.R;
public class HourglassView extends View {
private final Paint foregroundPaint;
private final Paint backgroundPaint;
private final Paint progressPaint;
private Bitmap empty;
private Bitmap full;
private float percentage;
private int offset;
public HourglassView(Context context) {
this(context, null);
}
public HourglassView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public HourglassView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
int tint = 0;
if (attrs != null) {
TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.HourglassView, 0, 0);
this.empty = BitmapFactory.decodeResource(getResources(), typedArray.getResourceId(R.styleable.HourglassView_empty, 0));
this.full = BitmapFactory.decodeResource(getResources(), typedArray.getResourceId(R.styleable.HourglassView_full, 0));
this.percentage = typedArray.getInt(R.styleable.HourglassView_percentage, 50);
this.offset = typedArray.getInt(R.styleable.HourglassView_offset, 0);
tint = typedArray.getColor(R.styleable.HourglassView_tint, 0);
typedArray.recycle();
}
this.backgroundPaint = new Paint();
this.foregroundPaint = new Paint();
this.progressPaint = new Paint();
this.backgroundPaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.MULTIPLY));
this.foregroundPaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.MULTIPLY));
this.progressPaint.setColor(getResources().getColor(R.color.black));
this.progressPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR));
setLayerType(View.LAYER_TYPE_SOFTWARE, null);
}
@Override
public void onDraw(Canvas canvas) {
float progressHeight = (full.getHeight() - (offset*2)) * (percentage / 100);
canvas.drawBitmap(full, 0, 0, backgroundPaint);
canvas.drawRect(0, 0, full.getWidth(), offset + progressHeight, progressPaint);
canvas.drawBitmap(empty, 0, 0, foregroundPaint);
}
public void setPercentage(float percentage) {
this.percentage = percentage;
invalidate();
}
public void setTint(int tint) {
this.backgroundPaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.MULTIPLY));
this.foregroundPaint.setColorFilter(new PorterDuffColorFilter(tint, PorterDuff.Mode.MULTIPLY));
}
}