直接继承view的自定义控件需要我们自己画出来,重写onDraw方法去画出控件。
下面是一个简单的例子,直接继承View通过重写onDraw方法画出自己的view.
1.在attrs.xml文件中定义控件属性
2.在控件构造方法中获取属性
3.重写onDraw方法画出视图
4. 在布局文件中使用
<resources>
<declare-styleable name="View2">
<attr name="textColor" format="color"></attr>
<attr name="textSize" format="dimension"></attr>
</declare-styleable>
</resources>
public class View2 extends View{
private Paint mPaint;
public View2(Context context) {
super(context);
}
public View2(Context context, AttributeSet attrs) {
super(context, attrs);
mPaint = new Paint();
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.View2);
int textColor = ta.getColor(R.styleable.View2_textColor, 0x990000FF);
float textSize = ta.getDimension(R.styleable.View2_textSize, 30);
mPaint.setTextSize(textSize);
mPaint.setColor(textColor);
ta.recycle();
}
/*重写onDraw方法去绘制控件*/
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
canvas.drawRect(new Rect(10 ,10,300,300), mPaint); //画一个矩形
}
}
同样布局文件要注意命名空间的问题,经过测试,这里必须去指定名称空间
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:jw="http://schemas.android.com/apk/res/wei.jiang.selfview"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<wei.jiang.selfview.view.View2
android:layout_width="wrap_content"
android:layout_height="wrap_content"
jw:textSize="100px"
jw:textColor="#ABCDEFEF"
>
</wei.jiang.selfview.view.View2>
xmlns:jw="http://schemas.android.com/apk/res/wei.jiang.selfview"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${relativePackage}.${activityClass}" >
<wei.jiang.selfview.view.View2
android:layout_width="wrap_content"
android:layout_height="wrap_content"
jw:textSize="100px"
jw:textColor="#ABCDEFEF"
>
</wei.jiang.selfview.view.View2>