/*
* Copyright (c) 2016 Zhang Hai <Dreaming.in.Code.ZH@Gmail.com>
* All Rights Reserved.
*/
package me.zhanghai.android.douya.ui;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.res.ColorStateList;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.graphics.drawable.Animatable;
import android.graphics.drawable.Drawable;
import android.support.annotation.ColorInt;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import me.zhanghai.android.materialprogressbar.IndeterminateCircularProgressDrawable;
public class WhiteIndeterminateProgressIconDrawable extends Drawable implements Animatable {
private static final int ICON_SIZE_DP = 24;
private static final int ICON_PADDING_DP = 2;
private int mIntrinsicSize;
private int mIntrinsicPadding;
private ProgressDrawable mProgressDrawable;
public WhiteIndeterminateProgressIconDrawable(Context context) {
mProgressDrawable = new ProgressDrawable(context);
float density = context.getResources().getDisplayMetrics().density;
mIntrinsicSize = Math.round(ICON_SIZE_DP * density);
mIntrinsicPadding = Math.round(ICON_PADDING_DP * density);
setTint(Color.WHITE);
}
@Override
@SuppressLint("NewApi")
public int getAlpha() {
return mProgressDrawable.getAlpha();
}
/**
* {@inheritDoc}
*/
@Override
public void setAlpha(int alpha) {
mProgressDrawable.setAlpha(alpha);
}
/**
* {@inheritDoc}
*/
@Override
@SuppressLint("NewApi")
public ColorFilter getColorFilter() {
return mProgressDrawable.getColorFilter();
}
/**
* {@inheritDoc}
*/
@Override
public void setColorFilter(@Nullable ColorFilter colorFilter) {
mProgressDrawable.setColorFilter(colorFilter);
}
/**
* {@inheritDoc}
*/
@Override
@SuppressLint("NewApi")
public void setTint(@ColorInt int tintColor) {
mProgressDrawable.setTint(tintColor);
}
/**
* {@inheritDoc}
*/
@Override
@SuppressLint("NewApi")
public void setTintList(@Nullable ColorStateList tint) {
mProgressDrawable.setTintList(tint);
}
/**
* {@inheritDoc}
*/
@Override
@SuppressLint("NewApi")
public void setTintMode(@NonNull PorterDuff.Mode tintMode) {
mProgressDrawable.setTintMode(tintMode);
}
/**
* {@inheritDoc}
*/
@Override
public int getOpacity() {
return PixelFormat.TRANSLUCENT;
}
@Override
public void start() {
mProgressDrawable.start();
}
@Override
public void stop() {
mProgressDrawable.stop();
}
@Override
public boolean isRunning() {
return mProgressDrawable.isRunning();
}
@Override
public int getIntrinsicWidth() {
return mIntrinsicSize;
}
@Override
public int getIntrinsicHeight() {
return mIntrinsicSize;
}
@Override
public void setBounds(int left, int top, int right, int bottom) {
super.setBounds(left, top, right, bottom);
int paddingHorizontal = (right - left) * mIntrinsicPadding / mIntrinsicSize;
int paddingVertical = (bottom - top) * mIntrinsicPadding / mIntrinsicSize;
mProgressDrawable.setBounds(left + paddingHorizontal, top + paddingVertical,
right - paddingHorizontal, bottom - paddingVertical);
}
@Override
public void draw(Canvas canvas) {
mProgressDrawable.draw(canvas);
}
public class ProgressDrawable extends IndeterminateCircularProgressDrawable {
public ProgressDrawable(Context context) {
super(context);
}
@Override
public void invalidateSelf() {
super.invalidateSelf();
WhiteIndeterminateProgressIconDrawable.this.invalidateSelf();
}
}
}