转自:http://www.2cto.com/kf/201408/324688.html
一个自定义的控件通常可能重写以下的方法:
1.一个构造方法, 获取Context。
2.onFinishlnflate()这是一个回调方法, 当应用从 XML 布局文件加载该组件并利用
它来构建界面之后, 该方法就会被回调
3.onMeasure(int,int):调用该方法来检测View组件及它所包含的所有子组件的大小.
4.onlayout(boolean,int,int,int,int):当该组件需要分配其子组件的位置、大小时,
该方法就会被回调. View类中布局发生改变时会调用的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,重载该类可以在布局发生改变时作定制处理,这在实现一些特效时非常有用。
5.onSizeChanged(int,int, int, int):当该组件的大小被改变时回调该方法.
6.onDraw(canves): 当该组件将要绘制它的内容时回调该方法迸行绘制. View类中用于重绘的方法,这个方法是所有View、ViewGroup及其派生类都具有的方法,也是Android UI绘制最重要的方法。开发者可重载该方法,并在重载的方法内部基于参数canvas绘制自己的各种图形、图像效果。
7.onKeyDown(int,KeyEvent): 当某个键被按下时触发该方法.
8.onKayUp(int,KeyEvent), 当松开某个键时触发该方法.
9.onTrackballEvent (MotionEvent): 当发生轨迹球事件时触发该方法.
10.onTouchEvent (MotionEvent): 当发生触摸屏事件时触发该方法.
11.onWindowFocuschanged(boolean): 当该组件得到、失去焦点时触发该方法.
12.onAttachedToWindow():当把该组件放入某个窗口时触发该方法.
13.onDetachedFromWindow(): 当把该组件从某个窗口上分离时触发该方法.
14.onWindowVisibilityChanged(int):当包含该组件的窗口的可见性发生改变时触发该
方法.
package com.zw.zidingyikongjian;
/**
* 继承View重写onDraw()方法
* zhangwei
*/
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
public class ZiDingYiView extends View {
private float circleX=40;//显示位置的X坐标
private float circleY=60;
private float circleR=30;//半径
public ZiDingYiView(Context context, AttributeSet attrs) {
super(context, attrs);
}
// 重写ondraw方法
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
//创建并实例化Paint的对象
Paint p=new Paint();
p.setColor(Color.RED);
//绘制小圆点
canvas.drawCircle(circleX, circleY, circleR, p);
}
public float getCircleX() {
return circleX;
}
public void setCircleX(float circleX) {
this.circleX = circleX;
}
public float getCircleY() {
return circleY;
}
public void setCircleY(float circleY) {
this.circleY = circleY;
}
public float getCircleR() {
return circleR;
}
public void setCircleR(float circleR) {
this.circleR = circleR;
}
}
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >
<com.zw.zidingyikongjian.ZiDingYiView
android:id="@+id/drawView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world" />
</RelativeLayout>
《三》在MaiActivity.java中书写逻辑
public class MainActivity extends Activity {
private ZiDingYiView drawView=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
drawView=(ZiDingYiView) findViewById(R.id.drawView);
//
drawView.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
drawView.setCircleX(event.getX());
drawView.setCircleY(event.getY());
drawView.invalidate();
return true;
}
});
}
}