|
|
|
@@ -7,12 +7,15 @@ package cc.winboll.studio.libaes.views;
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.Context;
|
|
|
|
import android.content.res.TypedArray;
|
|
|
|
import android.content.res.TypedArray;
|
|
|
|
|
|
|
|
import android.graphics.Color;
|
|
|
|
import android.graphics.drawable.GradientDrawable;
|
|
|
|
import android.graphics.drawable.GradientDrawable;
|
|
|
|
import android.graphics.drawable.LayerDrawable;
|
|
|
|
import android.graphics.drawable.LayerDrawable;
|
|
|
|
import android.util.AttributeSet;
|
|
|
|
import android.util.AttributeSet;
|
|
|
|
import androidx.appcompat.widget.Toolbar;
|
|
|
|
import androidx.appcompat.widget.Toolbar;
|
|
|
|
import cc.winboll.studio.libaes.R;
|
|
|
|
import cc.winboll.studio.libaes.R;
|
|
|
|
import cc.winboll.studio.libappbase.LogUtils;
|
|
|
|
import android.graphics.drawable.Drawable;
|
|
|
|
|
|
|
|
import androidx.core.content.ContextCompat;
|
|
|
|
|
|
|
|
import android.graphics.PorterDuff;
|
|
|
|
|
|
|
|
|
|
|
|
public class ASupportToolbar extends Toolbar {
|
|
|
|
public class ASupportToolbar extends Toolbar {
|
|
|
|
|
|
|
|
|
|
|
|
@@ -22,120 +25,65 @@ public class ASupportToolbar extends Toolbar {
|
|
|
|
int mStartColor;
|
|
|
|
int mStartColor;
|
|
|
|
int mCenterColor;
|
|
|
|
int mCenterColor;
|
|
|
|
int mEndColor;
|
|
|
|
int mEndColor;
|
|
|
|
GradientDrawable[] array = new GradientDrawable[3];
|
|
|
|
|
|
|
|
LayerDrawable ld;
|
|
|
|
LayerDrawable ld;
|
|
|
|
|
|
|
|
GradientDrawable[] array = new GradientDrawable[3];
|
|
|
|
|
|
|
|
//private GradientDrawable gradientDrawable;
|
|
|
|
|
|
|
|
|
|
|
|
public ASupportToolbar(Context context) {
|
|
|
|
public ASupportToolbar(Context context) {
|
|
|
|
super(context);
|
|
|
|
super(context);
|
|
|
|
LogUtils.d(TAG, "ASupportToolbar() constructor");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public ASupportToolbar(Context context, AttributeSet attrs) {
|
|
|
|
public ASupportToolbar(Context context, AttributeSet attrs) {
|
|
|
|
super(context, attrs);
|
|
|
|
super(context, attrs);
|
|
|
|
LogUtils.d(TAG, "ASupportToolbar() attrs constructor");
|
|
|
|
TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ASupportToolbar, R.attr.aSupportToolbar, 0);
|
|
|
|
initStyledAttributes(attrs, R.attr.aSupportToolbar);
|
|
|
|
mTitleTextColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarTitleTextColor, Color.GREEN);
|
|
|
|
}
|
|
|
|
mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, Color.BLUE);
|
|
|
|
|
|
|
|
mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, Color.RED);
|
|
|
|
public ASupportToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
|
|
|
|
mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, Color.YELLOW);
|
|
|
|
super(context, attrs, defStyleAttr);
|
|
|
|
// 返回一个绑定资源结束的信号给资源
|
|
|
|
LogUtils.d(TAG, "ASupportToolbar() attrs defStyleAttr constructor");
|
|
|
|
|
|
|
|
initStyledAttributes(attrs, defStyleAttr);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void initStyledAttributes(AttributeSet attrs, int defStyleAttr) {
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "initStyledAttributes() start");
|
|
|
|
|
|
|
|
TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ASupportToolbar, defStyleAttr, 0);
|
|
|
|
|
|
|
|
mTitleTextColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarTitleTextColor, 0xFF00FF00);
|
|
|
|
|
|
|
|
mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, 0xFF03AB4E);
|
|
|
|
|
|
|
|
mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, 0xFF03AB4E);
|
|
|
|
|
|
|
|
mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, 0xFF3DDC84);
|
|
|
|
|
|
|
|
LogUtils.d(TAG, String.format("initStyledAttributes() colors: title=0x%x, start=0x%x, center=0x%x, end=0x%x", mTitleTextColor, mStartColor, mCenterColor, mEndColor));
|
|
|
|
|
|
|
|
a.recycle();
|
|
|
|
a.recycle();
|
|
|
|
setTitleTextColor(mTitleTextColor);
|
|
|
|
notifyColorChange();
|
|
|
|
LogUtils.d(TAG, "initStyledAttributes() end");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
protected void onAttachedToWindow() {
|
|
|
|
|
|
|
|
super.onAttachedToWindow();
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "onAttachedToWindow() start");
|
|
|
|
|
|
|
|
refreshFromTheme();
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "onAttachedToWindow() end");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public void refreshFromTheme() {
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "refreshFromTheme() start");
|
|
|
|
|
|
|
|
TypedArray a = getContext().obtainStyledAttributes(R.styleable.ASupportToolbar);
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
|
|
|
mTitleTextColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarTitleTextColor, 0xFF00FF00);
|
|
|
|
|
|
|
|
mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, 0xFF03AB4E);
|
|
|
|
|
|
|
|
mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, 0xFF03AB4E);
|
|
|
|
|
|
|
|
mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, 0xFF3DDC84);
|
|
|
|
|
|
|
|
LogUtils.d(TAG, String.format("refreshFromTheme() colors: title=0x%x, start=0x%x, center=0x%x, end=0x%x", mTitleTextColor, mStartColor, mCenterColor, mEndColor));
|
|
|
|
|
|
|
|
} finally {
|
|
|
|
|
|
|
|
a.recycle();
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
postNotifyColorChange();
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "refreshFromTheme() end");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void postNotifyColorChange() {
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "postNotifyColorChange()");
|
|
|
|
|
|
|
|
removeCallbacks(mRefreshRunnable);
|
|
|
|
|
|
|
|
post(mRefreshRunnable);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Runnable mRefreshRunnable = new Runnable() {
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "mRefreshRunnable.run() start");
|
|
|
|
|
|
|
|
notifyColorChange();
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "mRefreshRunnable.run() end");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void notifyColorChange() {
|
|
|
|
void notifyColorChange() {
|
|
|
|
LogUtils.d(TAG, "notifyColorChange() start");
|
|
|
|
// 工具栏描边
|
|
|
|
LogUtils.d(TAG, String.format("notifyColorChange() size: width=%d, height=%d", getWidth(), getHeight()));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int nWidth = getWidth();
|
|
|
|
|
|
|
|
int nHeight = getHeight();
|
|
|
|
|
|
|
|
if (nWidth == 0 || nHeight == 0) {
|
|
|
|
|
|
|
|
LogUtils.d(TAG, "notifyColorChange() skipped: width or height is 0");
|
|
|
|
|
|
|
|
return;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
int nStroke = 5;
|
|
|
|
int nStroke = 5;
|
|
|
|
|
|
|
|
|
|
|
|
int colors0[] = { mEndColor , mCenterColor, mStartColor };
|
|
|
|
//分别为开始颜色,中间夜色,结束颜色
|
|
|
|
|
|
|
|
int colors0[] = { mEndColor , mCenterColor, mStartColor};
|
|
|
|
|
|
|
|
GradientDrawable gradientDrawable0;
|
|
|
|
array[2] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors0);
|
|
|
|
array[2] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors0);
|
|
|
|
array[2].setShape(GradientDrawable.RECTANGLE);
|
|
|
|
gradientDrawable0 = array[2];
|
|
|
|
array[2].setColors(colors0);
|
|
|
|
gradientDrawable0.setShape(GradientDrawable.RECTANGLE);
|
|
|
|
array[2].setGradientType(GradientDrawable.LINEAR_GRADIENT);
|
|
|
|
gradientDrawable0.setColors(colors0); //添加颜色组
|
|
|
|
array[2].setCornerRadius(20);
|
|
|
|
gradientDrawable0.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置线性渐变
|
|
|
|
|
|
|
|
gradientDrawable0.setCornerRadius(20);
|
|
|
|
|
|
|
|
|
|
|
|
int colors1[] = { mCenterColor, mCenterColor, mCenterColor };
|
|
|
|
int colors1[] = { mCenterColor , mCenterColor, mCenterColor };
|
|
|
|
|
|
|
|
GradientDrawable gradientDrawable1;
|
|
|
|
array[1] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors1);
|
|
|
|
array[1] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors1);
|
|
|
|
array[1].setShape(GradientDrawable.RECTANGLE);
|
|
|
|
gradientDrawable1 = array[1];
|
|
|
|
array[1].setColors(colors1);
|
|
|
|
gradientDrawable1.setShape(GradientDrawable.RECTANGLE);
|
|
|
|
array[1].setGradientType(GradientDrawable.LINEAR_GRADIENT);
|
|
|
|
gradientDrawable1.setColors(colors1); //添加颜色组
|
|
|
|
array[1].setCornerRadius(20);
|
|
|
|
gradientDrawable1.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置线性渐变
|
|
|
|
|
|
|
|
gradientDrawable1.setCornerRadius(20);
|
|
|
|
|
|
|
|
|
|
|
|
int colors2[] = { mEndColor, mCenterColor, mStartColor };
|
|
|
|
int colors2[] = { mEndColor, mCenterColor, mStartColor };
|
|
|
|
|
|
|
|
GradientDrawable gradientDrawable2;
|
|
|
|
array[0] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors2);
|
|
|
|
array[0] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors2);
|
|
|
|
array[0].setShape(GradientDrawable.RECTANGLE);
|
|
|
|
gradientDrawable2 = array[0];
|
|
|
|
array[0].setColors(colors2);
|
|
|
|
gradientDrawable2.setShape(GradientDrawable.RECTANGLE);
|
|
|
|
array[0].setGradientType(GradientDrawable.LINEAR_GRADIENT);
|
|
|
|
gradientDrawable2.setColors(colors2); //添加颜色组
|
|
|
|
array[0].setCornerRadius(20);
|
|
|
|
gradientDrawable2.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置线性渐变
|
|
|
|
|
|
|
|
gradientDrawable2.setCornerRadius(20);
|
|
|
|
|
|
|
|
|
|
|
|
ld = new LayerDrawable(array);
|
|
|
|
ld = new LayerDrawable(array); //参数为上面的Drawable数组
|
|
|
|
ld.setLayerInset(2, nStroke * 2, nStroke * 2, nWidth + nStroke * 2, nHeight + nStroke * 2);
|
|
|
|
ld.setLayerInset(2, nStroke * 2, nStroke * 2, getWidth() + nStroke * 2, getHeight() + nStroke * 2);
|
|
|
|
ld.setLayerInset(1, nStroke, nStroke, nWidth + nStroke, nHeight + nStroke);
|
|
|
|
ld.setLayerInset(1, nStroke, nStroke, getWidth() + nStroke, getHeight() + nStroke);
|
|
|
|
ld.setLayerInset(0, 0, 0, nWidth, nHeight);
|
|
|
|
ld.setLayerInset(0, 0, 0, getWidth(), getHeight());
|
|
|
|
|
|
|
|
|
|
|
|
setBackgroundDrawable(ld);
|
|
|
|
setBackgroundDrawable(ld);
|
|
|
|
setTitleTextColor(mTitleTextColor);
|
|
|
|
setTitleTextColor(mTitleTextColor);
|
|
|
|
setSubtitleTextColor(mTitleTextColor);
|
|
|
|
setSubtitleTextColor(mTitleTextColor);
|
|
|
|
LogUtils.d(TAG, "notifyColorChange() end");
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|