创建新的视图控件:
1、如果现有控件满足基本功能,只需要对现有控件的外观或者行为进行修改或者扩展,通过重写事件处理程序和onDraw方法,但是仍然回调超类方法,对视图进行定制,不需要重新实现它的功能。
2、通过组合多个视图创建不可分割的、可重用的小组件,从而使他可以综合使用多个相互的视图的功能。
3、当需要一个全新的界面,通过修改和组合现有控件不能实现这个目标,就需要创建一个全新的控件。
eg:
package com.conghua.view;
import com.conghua.activity.R;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.TextView;
public class MyTextView extends TextView {
private Paint marginPaint ;
private Paint linePaint ;
private int paperColor ;
private float margin ;
public MyTextView(Context context) {
super(context);
init() ;
}
public MyTextView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init() ;
}
public MyTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init() ;
}
@Override
protected void onDraw(Canvas canvas) {
//绘制页面颜色
canvas.drawColor(paperColor) ;
//绘制规划的直线
canvas.drawLine(0, 0, getMeasuredHeight(), 0, linePaint) ;
canvas.drawLine(0, getMeasuredHeight(), getMeasuredWidth(), getMeasuredHeight(), linePaint) ;
//绘制边缘
canvas.drawLine(margin, 0, margin, getMeasuredHeight(), marginPaint) ;
//移动文本,让它跨过边缘
canvas.save() ;
canvas.translate(margin, 0) ;
//使用TextView渲染文本
super.onDraw(canvas);
canvas.restore() ;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
return super.onKeyDown(keyCode, event);
}
private void init() {
//创建对资源表的引用
Resources myResources = getResources() ;
//创建onDraw方法中使用的画刷
marginPaint = new Paint(Paint.ANTI_ALIAS_FLAG) ;
marginPaint.setColor(myResources.getColor(R.color.maigin)) ;
linePaint = new Paint(Paint.ANTI_ALIAS_FLAG) ;
linePaint.setColor(myResources.getColor(R.color.lines)) ;
//获取背景颜色和边缘宽度
paperColor = myResources.getColor(R.color.paper) ;
margin = myResources.getColor(R.color.maigin) ;
}
}