定义:
| attrs中的format属性 | TypedArray对应方法 | 返回 | 备注 |
|---|
| reference | getInt | int | |
| color | getColor | int | |
| boolean | getBoolean | boolean | |
| dimension | getDimension | float | |
| float | getFloat | float | |
| integer | getInteger,getInt | Integer,int | |
| string | getString | String | 必须是资源文件中的字符串 |
| fraction | getFraction | float | |
| enum | getInt,getInteger,getFloat,getString | int,Integer,float,String | 返回的全是value的值 |
| flag | getInt,getFloat,getString | int,float,string | 返回value值的或运算值 |
声明
public class MyView extends View {
private static final String TAG = MyView.class.getSimpleName();
public MyView(Context context) {
this(context, null);
}
public MyView(Context context, @Nullable AttributeSet attrs) {
this(context, attrs, -1);
}
public MyView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyView);
int vColor = typedArray.getColor(R.styleable.MyView_vColor, getResources().getColor(R.color.black));
// ColorDrawable / BitmapDrawable
Drawable vDrawable = typedArray.getDrawable(R.styleable.MyView_vDrawable);
float vDimen = typedArray.getDimension(R.styleable.MyView_vDimen, dp2px(20));
float vFloat = typedArray.getFloat(R.styleable.MyView_vFloat, -1F);
int vInteger = typedArray.getInteger(R.styleable.MyView_vInteger, -1);
boolean vBoolean = typedArray.getBoolean(R.styleable.MyView_vBoolean, false);
String vString = typedArray.getString(R.styleable.MyView_vString);
int vReference = typedArray.getResourceId(R.styleable.MyView_vReference, R.mipmap.ic_launcher);
int vType = typedArray.getInteger(R.styleable.MyView_vType, -1);
int vFlag = typedArray.getInt(R.styleable.MyView_vFlag, 0);
Log.e(TAG, "MyView:vColor===============> " + vColor);
Log.e(TAG, "MyView:vDrawable===============> " + vDrawable);
Log.e(TAG, "MyView:vDimen===============> " + vDimen);
Log.e(TAG, "MyView:vFloat===============> " + vFloat);
Log.e(TAG, "MyView:vInteger===============> " + vInteger);
Log.e(TAG, "MyView:vBoolean===============> " + vBoolean);
Log.e(TAG, "MyView:vString===============> " + vString);
Log.e(TAG, "MyView:vReference===============> " + vReference);
Log.e(TAG, "MyView:vType===============> " + vType);
Log.e(TAG, "MyView:vFlag===============> " + vFlag);
typedArray.recycle();
}
public int dp2px(float dp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp,
getResources().getDisplayMetrics());
}
private int sp2px(float sp) {
return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp,
getResources().getDisplayMetrics());
}
}
使用
drawable 的绘制
void drawDrawable(Canvas canvas, Rect bound,Drawable drawable) {
drawable.setBounds(bounds);
drawable.draw(canvas);
}