package com.banking.xc.utils.frame;
import java.io.InputStream;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.LinearGradient;
import android.graphics.Paint;
import android.graphics.Rect;
import android.graphics.RectF;
import android.graphics.Shader;
import android.graphics.Typeface;
import android.graphics.Paint.Align;
import android.graphics.Paint.FontMetrics;
import android.graphics.drawable.Drawable;
import skytv_com.banking.enjoymovie.R;
import com.banking.xc.utils.DPIUtil;
import com.banking.xc.utils.frame.TabBarButton.StateController;
public class RadioStateDrawable extends Drawable {
private Bitmap bitmap;
private Bitmap highlightBitmap;
private Shader shader;
private Shader textShader;
Context context;
public static int width;
public static int screen_width;
private boolean highlight;
private String label;
private StateController stateController;// 状态控制器
public static final int SHADE_GRAY = 0;
public static final int SHADE_BLUE = 1;
public static final int SHADE_MAGENTA = 2;
public static final int SHADE_YELLOW = 3;
public static final int SHADE_GREEN = 4;
public static final int SHADE_RED = 5;
public static final int SHADE_ORANGE = 6;
public RadioStateDrawable(Context context, int imageID, String label, boolean highlight, int shade) {
super();
this.highlight = highlight;
this.context = context;
this.label = label;
InputStream is = context.getResources().openRawResource(imageID);
bitmap = BitmapFactory.decodeStream(is);
setShade(shade);
//highlightBitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.bottom_bar_highlight);
}
public RadioStateDrawable(Context context, int imageID, String label, boolean highlight, int startGradientColor, int endGradientColor) {
super();
this.highlight = highlight;
this.context = context;
this.label = label;
InputStream is = context.getResources().openRawResource(imageID);
bitmap = BitmapFactory.decodeStream(is);
int[] shades = new int[] { startGradientColor, endGradientColor };
shader = new LinearGradient(0, 0, 0, bitmap.getHeight(), shades, null, Shader.TileMode.MIRROR);
}
public void setShade(int shade) {
int[] shades = new int[2];
switch (shade) {
case SHADE_GRAY: {
shades = new int[] { Color.LTGRAY, Color.DKGRAY };
break;
}
case SHADE_BLUE: {
shades = new int[] { Color.CYAN, Color.BLUE };
break;
}
case SHADE_RED: {
shades = new int[] { Color.MAGENTA, Color.RED };
break;
}
case SHADE_MAGENTA: {
shades = new int[] { Color.MAGENTA, Color.rgb(292, 52, 100) };
break;
}
case SHADE_YELLOW: {
shades = new int[] { Color.YELLOW, Color.rgb(255, 126, 0) };
break;
}
case SHADE_ORANGE: {
shades = new int[] { Color.rgb(255, 126, 0), Color.rgb(255, 90, 0) };
break;
}
case SHADE_GREEN: {
shades = new int[] { Color.GREEN, Color.rgb(0, 79, 4) };
break;
}
}
shader = new LinearGradient(0, 0, 0, bitmap.getHeight(), shades, null, Shader.TileMode.MIRROR);
if (highlight)
textShader = new LinearGradient(0, 0, 0, 10, new int[] { Color.WHITE, Color.LTGRAY }, null, Shader.TileMode.MIRROR);
else
textShader = new LinearGradient(0, 0, 0, 10, new int[] { Color.LTGRAY, Color.DKGRAY }, null, Shader.TileMode.MIRROR);
}
@Override
public void draw(Canvas canvas) {
// canvas.setDensity((int) context.getResources().getDisplayMetrics().density);
// bitmap.setDensity((int) context.getResources().getDisplayMetrics().density);
int iconWidth = DPIUtil.dip2px(28);
int iconHeight = DPIUtil.dip2px(26);
/*
* if (width==0) { if (screen_width==0) screen_width = 320; width=screen_width/5; }
*/
int x = ((width - iconWidth) / 2)-DPIUtil.dip2px(1);
int y = DPIUtil.dip2px(2);
canvas.drawColor(Color.TRANSPARENT);
// 画数字准备
Paint numP = new Paint();
numP.setColor(Color.WHITE);
numP.setStyle(Paint.Style.FILL);
numP.setTextSize(DPIUtil.dip2px(13));
numP.setTypeface(Typeface.DEFAULT_BOLD);
numP.setFakeBoldText(true);
numP.setTextAlign(Align.CENTER);
numP.setAntiAlias(true);
Rect rect = new Rect(x, y, x + iconWidth, y + iconHeight);
// 画图标
canvas.drawBitmap(bitmap, null, rect, null);
// 画标题准备
Paint titleP = new Paint();
titleP.setColor(Color.WHITE);
titleP.setStyle(Paint.Style.FILL);
titleP.setTextSize(DPIUtil.dip2px(13));
titleP.setTypeface(Typeface.DEFAULT_BOLD);
titleP.setTextAlign(Align.CENTER);
titleP.setAntiAlias(true);
// 画 > 标题
canvas.drawText(label, (width / 2)-DPIUtil.dip2px(1), y + iconHeight + DPIUtil.dip2px(11), titleP);
if (null != stateController && null != stateController.getNum()) {
String num = stateController.getNum().toString();
// 画数字准备
float centerX = width - DPIUtil.dip2px(23);
float centerY = y + DPIUtil.dip2px(12);
// 计算数字的宽度
float textWidth = 0;
float[] widths = new float[num.length()];
numP.getTextWidths(num, widths);
for (int i = 0; i < widths.length; i++) {
textWidth += widths[i];
}
// 计算数字的高度
FontMetrics fm = numP.getFontMetrics();// 得到系统默认字体属性
float textHeight = fm.descent - fm.top;// 获得字体高度
// 画圆角矩形准备
float rRectWidth = Math.max(textHeight, textWidth + DPIUtil.dip2px(10));
float rRectHeight = textHeight;
Paint rRectP = new Paint();
rRectP.setAntiAlias(true);
RectF rectF = new RectF();
rectF.left = centerX - rRectWidth / 2;
rectF.top = centerY - DPIUtil.dip2px(4) - rRectHeight / 2;
rectF.right = rectF.left + rRectWidth;
rectF.bottom = rectF.top + rRectHeight;
float rx = rRectHeight/2;// 圆角
float ry = rx;// 圆角
// 画 > 圆角矩形
// 渐变填充
Shader mShader = new LinearGradient(0, 0, 0, textHeight,//
0xFFF50000, 0xFFB10202,//
Shader.TileMode.CLAMP);
rRectP.setStyle(Paint.Style.FILL);
rRectP.setShader(mShader);
canvas.drawRoundRect(rectF, rx, ry, rRectP);
// 描边
rRectP.setStyle(Paint.Style.STROKE);
rRectP.setShader(null);
rRectP.setColor(Color.WHITE);
rRectP.setStrokeWidth(DPIUtil.dip2px(2));
canvas.drawRoundRect(rectF, rx, ry, rRectP);
// 画 > 数字
canvas.drawText(num, centerX, centerY, numP);
}
}
@Override
public int getOpacity() {
return 0;
}
@Override
public void setAlpha(int alpha) {
}
@Override
public void setColorFilter(ColorFilter cf) {
}
public void setStateController(StateController stateController) {
this.stateController = stateController;
}
}