
构造器:重写构造器是定制View的最基本方式,当Java代码创建一个View实例,根据XML布局文件加载并构建界面时将需要调用该构造器。-onFinishInflate():这是一个回调方法,当应用从XML布局文件加载该组件并利用它来构建界面之后,该方法就会被回调。-onLayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小时,该方法就会被回调。-onSizeChanged(int,int,int,int)当该组件的大小被改变时回调该方法。-onDraw(Canvas)当该组件将要绘制它的内容时回调该方法进行绘制。-onKeyDown(int,KeyEvent):当某个键被按下时触发该方法-onKeyUp(int,KeyEvent)当松开某个键触发该方法。-onTrackballEvent(MotionEvent)当发生轨迹球事件时触发该方法。-onTouchEvent(MotionEvent) 当发生触摸屏事件时触发该方法。-onWindowFocusChanged(boolean)当该组件得到、失去焦点时触发该方法。-onAttachedToWindow()当把该组件放入某个窗口时触发该方法。-onDetachedFromWindow()当把该组件从某个窗口上分离时触发该方法。-onWindowVisibilityChanged(int)当包含该组件的窗口的可见性发生改变时触发该方法。publicclassDrawView extends View{ publicfloat currentX =40; publicfloat currentY =50; // 定义、并创建画笔 Paint p =newPaint(); publicDrawView(Context context) { super(context); } publicDrawView(Context context ,AttributeSetset) { super(context,set); } @Override publicvoid onDraw(Canvas canvas) { super.onDraw(canvas); // 设置画笔的颜色 p.setColor(Color.RED); // 绘制一个小圆(作为小球) canvas.drawCircle(currentX, currentY,15, p); } // 为该组件的触碰事件重写事件处理方法 @Override public boolean onTouchEvent(MotionEvent event) { // 修改currentX、currentY两个属性 currentX = event.getX(); currentY = event.getY(); // 通知当前组件重绘自己 invalidate(); // 返回true表明该处理方法已经处理该事件 returntrue; }} <?xml version="1.0" encoding="utf-8"?> <resources> <attrname="test1"format="string"/> <declare-styleablename="MyView"> <attrname="textColor"format="color"/> <attrname="textSize"format="dimension"/> <attrname="text"format="string"/> </declare-styleable> </resources> publicclassMyViewextendsView { privatePaint mPaint; privateContext mContext; privatestaticString mString; privateString test; publicMyView(Context context) { super(context); mPaint =newPaint(); } publicMyView(Context context,AttributeSet attrs) { super(context,attrs); mPaint =newPaint(); /*这里取得declare-styleable集合*/ TypedArray typeArray = context.obtainStyledAttributes(attrs,R.styleable.MyView); /*这里从集合里取出相对应的属性值,第二参数是如果使用者没用配置该属性时所用的默认值*/ int textColor = typeArray.getColor(R.styleable.MyView_textColor,0XFFFFFFFF); float textSize = typeArray.getDimension(R.styleable.MyView_textSize,36); mString = typeArray.getString(R.styleable.MyView_text); /*设置自己的类成员变量*/ mPaint.setTextSize(textSize); mPaint.setColor(textColor); /*关闭资源*/ typeArray.recycle(); } @Override protectedvoid onDraw(Canvas canvas) { super.onDraw(canvas); mPaint.setStyle(Style.FILL); canvas.drawRect(newRect(10,10,90,90), mPaint); mPaint.setColor(Color.BLUE); canvas.drawText(mString,10,110, mPaint); } } <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:myandroid="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> android:layout_width="fill_parent" android:layout_height="wrap_content" myandroid:textColor="#ff0000" myandroid:textSize="20px" myandroid:text="http://wujiandong.iteye.com"/> </LinearLayout> 

原文:http://www.cnblogs.com/Doing-what-I-love/p/5533056.html