自定義view-跟隨手指動的小球

View組件類似於javaSwing中的JPanel。它只是一個巨型的空白區域,view組件內沒有任何的內容,對於android的其他組件來說,他們都繼承了view組件,並在view所提供的空白區域進行外觀編輯,

 

下面是view開發是所用到的回調方法:

 

onFinishInflate() 當View中所有的子控件均被映射成xml後觸發
onMeasure(int, int) 確定所有子元素的大小
onLayout(boolean, int, int, int, int) 當View分配所有的子元素的大小和位置時觸發
onSizeChanged(int, int, int, int) 當view的大小發生變化時觸發
onDraw(Canvas) view渲染內容的細節
onKeyDown(int, KeyEvent) 有按鍵按下後觸發
onKeyUp(int, KeyEvent) 有按鍵按下後彈起時觸發
onTrackballEvent(MotionEvent) 軌跡球事件
onTouchEvent(MotionEvent) 觸屏事件
onFocusChanged(boolean, int, Rect) 當View獲取或失去焦點時觸發
onWindowFocusChanged(boolean) 當窗口包含的view獲取或失去焦點時觸發
onAttachedToWindow() 當view被附着到一個窗口時觸發
onDetachedFromWindow() 當view離開附着的窗口時觸發
onWindowVisibilityChanged(int) 當窗口中包含的可見的view發生變化時觸發

 

 

實例:隨手指動的小球

 

自定義組件:

 

package cn.haozi;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.View;

public class Drawview extends View {

public float currentX = 40;
public float currentY = 50;


public Drawview(Context context) {
super(context);

}

public void onDraw(Canvas canvas){

super.onDraw(canvas);
//創建一個畫筆
Paint p = new Paint();
//設置畫筆的顏色
p.setColor(Color.BLUE);
//繪製一個小球
canvas.drawCircle(currentX, currentY, 15, p);


}


}

activity類:

package cn.haozi;

import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.LinearLayout;

public class DrawroolActivity extends Activity {

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

LinearLayout root = (LinearLayout) findViewById(R.id.root);

final Drawview draw = new Drawview(this);

draw.setMinimumHeight(300);
draw.setMinimumWidth(500);

//爲draw添加綁定touch事件

draw.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View agr0, MotionEvent event) {
//修改draw組件的兩個屬性
draw.currentX = event.getX();
draw.currentY = event.getY();

//重繪
draw.invalidate();



return false;
}
});
root.addView(draw);

}
}

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章