package skin.support.widget;
import android.content.res.ColorStateList;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.support.v4.graphics.drawable.DrawableCompat;
import android.support.v7.widget.TintTypedArray;
import android.util.AttributeSet;
import android.widget.ImageView;
import skin.support.R;
import skin.support.content.res.SkinCompatResources;
import skin.support.utils.SkinLog;
/**
* Created by ximsfei on 2017/1/12.
*/
public class SkinCompatImageHelper extends SkinCompatHelper {
private static final String TAG = SkinCompatImageHelper.class.getSimpleName();
private final ImageView mView;
private int mSrcResId = INVALID_ID;
public SkinCompatImageHelper(ImageView imageView) {
mView = imageView;
}
public void loadFromAttributes(AttributeSet attrs, int defStyleAttr) {
TintTypedArray a = null;
try {
a = TintTypedArray.obtainStyledAttributes(mView.getContext(), attrs,
R.styleable.SkinCompatImageView, defStyleAttr, 0);
mSrcResId = a.getResourceId(R.styleable.SkinCompatImageView_android_src, -1);
} finally {
if (a != null) {
a.recycle();
}
}
applySkin();
}
public void setImageResource(int resId) {
mSrcResId = resId;
applySkin();
}
public void applySkin() {
mSrcResId = checkResourceId(mSrcResId);
SkinLog.d(TAG, "mSrcResId = " + mSrcResId);
if (mSrcResId == INVALID_ID) {
return;
}
String typeName = mView.getResources().getResourceTypeName(mSrcResId);
if ("color".equals(typeName)) {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
int color = SkinCompatResources.getInstance().getColor(mSrcResId);
Drawable drawable = mView.getDrawable();
if (drawable instanceof ColorDrawable) {
((ColorDrawable) drawable.mutate()).setColor(color);
} else {
mView.setImageDrawable(new ColorDrawable(color));
}
} else {
ColorStateList colorStateList = SkinCompatResources.getInstance().getColorStateList(mSrcResId);
Drawable drawable = mView.getDrawable();
DrawableCompat.setTintList(drawable, colorStateList);
mView.setImageDrawable(drawable);
}
} else if ("drawable".equals(typeName)) {
Drawable drawable = SkinCompatResources.getInstance().getDrawable(mSrcResId);
mView.setImageDrawable(drawable);
} else if ("mipmap".equals(typeName)) {
Drawable drawable = SkinCompatResources.getInstance().getMipmap(mSrcResId);
mView.setImageDrawable(drawable);
}
}
}