自定义View的分类
自定义View的步骤
自定义属性
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--定义名字叫MyAttributeView属性集合-->
<declare-styleable name="MyAttributeView">
<!--定义一个名字叫my_name并且类型是string的属性-->
<attr name="my_name" format="string"/>
<attr name="my_age" format="integer"/>
<attr name="my_bg" format="reference|color"/>
</declare-styleable>
</resources>
<!--使用自定义View的时候设置自定义属性-->
<cy.review.customattributes.MyAttributeView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:my_age="100"
app:my_bg="@drawable/jtx"
app:my_name="android0220"/>
public class MyAttributeView extends View {
private int myAge;
private String myName;
private Bitmap myBg;
public MyAttributeView(Context context, AttributeSet attrs) {
super(context, attrs);
//获得属性集合
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.MyAttributeView);
for (int i = 0; i < typedArray.getIndexCount(); i++) {
int index = typedArray.getIndex(i);
switch (index) {
case R.styleable.MyAttributeView_my_age:
myAge = typedArray.getInt(index, 0);
break;
case R.styleable.MyAttributeView_my_name:
myName = typedArray.getString(index);
break;
case R.styleable.MyAttributeView_my_bg:
Drawable drawable = typedArray.getDrawable(index);
BitmapDrawable drawable1 = (BitmapDrawable) drawable;
myBg = drawable1.getBitmap();
break;
}
}
// 记得回收
typedArray.recycle();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Paint paint = new Paint();
canvas.drawText(myName + "---" + myAge, 50, 50, paint);
canvas.drawBitmap(myBg, 50, 50, paint);
}
}原文:https://www.cnblogs.com/chen-ying/p/12391005.html