轉自: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;
}
});
}
}