自定义Android组件之带图像的TextView
2010-05-14 16:36:00 来源:WEB开发网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);
}
}
在编写上面代码时需要注意如下3点:
1. 需要指定命名空间的值。该值将在标签的xmlns:mobile属性中定义。
2. 如果在配置组件的属性时指定了命名空间,需要在AttributeSet 接口的相应getter方法中的第1个参数指定命名空间的值,而第2个参数只需指定不带命名空间的属性名即可。
3. TextView类中的onDraw方法一定要在translate方法后面执行,否则系统不会移动TextView中的文本。
下面在main.xml文件中配置了7个IconTextView组件,分别设置了不同的字体大小,同时,文本前面的图像也会随着字体大小的变化而放大或缩小,配置代码如下:
复制到剪贴板 XML/HTML代码< ?xml version="1.0" encoding="utf-8"?>
< !-- 在下面的标签中通过xmlns:mobile属性定义了一个命名空间 -- >
< LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:mobile="http://net.blogjava.mobile" android:orientation="vertical"
android:layout_width="fill_parent" android:layout_height="fill_parent" >
< !-- mobile:iconSrc是可选属性,如果未设置该属性,则 IconTextView与TextView的效果相同 -- >
< !-- 由于IconTextView和Main类不在同一个包中,因此,需要显式指定 package -- >
< net.blogjava.mobile. widget.IconTextView
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:text="第一个笑脸" mobile:iconSrc="@drawable/small" / >
< net.blogjava.mobile.widget.IconTextView
更多精彩
赞助商链接