自定义控件-继承法



在布局文件中使用自定义的控件 

→ 声明自定义的命名空间:
    

    xmlns:mobile="http://com.kitty.widget"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical" >
     
 

→ 在布局中使用自定义的控件,传入控件属性:
       

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:text="第一个图标"

        mobile:iconSrc="@drawable/android" />


代码自定义控件
→ 令控件继承自现有控件:
    public class IconTextView extends TextView {...}

→ 定义命名空间:
    private final String namespace = "http://com.kitty.widget ";

→ 从布局文件读取控件属性:
    private int resourceId = 0;

private Bitmap bitmap;

 

public IconTextView(Context context, AttributeSet attrs) {

super(context, attrs);

 

resourceId = attrs.getAttributeResourceValue(namespace, "iconSrc", 0);

if (resourceId > 0) {

bitmap = BitmapFactory.decodeResource(getResources(), resourceId);

}

}

→  根据读入的属性绘制控件:
    @Override

protected void onDraw(Canvas canvas) {

if (bitmap != null) {

 

Rect src = new Rect();// 从原图上截取图像的区域

Rect target = new Rect();// 将截取的图像复制到的目标区域

 

src.left = 0;

src.top = 0;

src.right = bitmap.getWidth();

src.bottom = bitmap.getHeight();

 

int textHeight = (int) getTextSize();

target.left = 0;

target.top = (int) ((getMeasuredHeight() - getTextSize()) / 2) + 1;

target.bottom = target.top + textHeight;

target.right = (int) (textHeight * (bitmap.getWidth() / (float) bitmap.getHeight()));

// 开始绘制图像

canvas.drawBitmap(bitmap, src, target, getPaint());

// 将TextView中的文本向右移动一定的距离(在本例中移动了图像宽度加2个象素点的位置)

canvas.translate(target.right + 2, 0);

}

super.onDraw(canvas);



效果图:
 自定义控件-继承法_第1张图片

     

你可能感兴趣的:(Android自定义控件)