android之自定义属性--获属性值--并绘制
package com.example.test17;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.view.View;
import androidx.annotation.Nullable;
public class MyAttributeView extends View {
private int myAge;
private String myName;
private Bitmap myBg;
public MyAttributeView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
//获取属性三种方式
//第一种:通过命名空间
//在(.xml)文件中
//Android studio: xmlns:yiqi="http://schemas.android.com/apk/res-auto"
//eclipse: xmlns:yiqi="http://schemas.android.com/apk/<包名>"
String age = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "my_age");
String name = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "my_name");
String bg = attrs.getAttributeValue("http://schemas.android.com/apk/res-auto", "my_bg");
//第二种:遍历属性集合
for (int i = 0; i < attrs.getAttributeCount(); i++) {
// System.out.println(attrs.getAttributeName(i) + "==" +attrs.getAttributeValue(i));
}
//第三种:使用系统工具,获取属性
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:
BitmapDrawable drawable =(BitmapDrawable) typedArray.getDrawable(index);
myBg = drawable.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://blog.51cto.com/u