mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-24 08:47:46 +00:00
86 lines
2.9 KiB
Java
86 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));
|
|
}
|
|
}
|