基于監(jiān)聽(tīng)的事件處理
- 監(jiān)聽(tīng)處理模型:
- Event Sourse(事件源)
- Event(事件):用戶的一次操作會(huì)封裝在事件中乓旗,一般通過(guò)Event對(duì)象獲得界面組建的事件信息
- Event Listener: 監(jiān)聽(tīng)事件源發(fā)生的事件并對(duì)其作出響應(yīng)
- 委派式事件處理方式: 每個(gè)組件可為特定事件指定一個(gè)事件監(jiān)聽(tīng)器,每個(gè)事件監(jiān)聽(tīng)器可以監(jiān)聽(tīng)一個(gè)或者多個(gè)事件源。
- 基于監(jiān)聽(tīng)的事件處理模型編程步驟:
- 獲取事件源即監(jiān)聽(tīng)對(duì)象
- 將事件監(jiān)聽(tīng)器綁定至事件源上(可以使用匿名內(nèi)部類(lèi))
- 實(shí)現(xiàn)事件處理器
事件和事件監(jiān)聽(tīng)器
參見(jiàn)實(shí)例
- 內(nèi)部類(lèi)形式:將事件監(jiān)聽(tīng)器設(shè)置為當(dāng)前類(lèi)的內(nèi)部類(lèi)
- 外部類(lèi)形式:將事件監(jiān)聽(tīng)器設(shè)置為當(dāng)前類(lèi)的外部類(lèi)
- 匿名內(nèi)部類(lèi):辖试。初肉。析校。(推薦)
- Activity本身實(shí)現(xiàn)監(jiān)聽(tīng)器接口并實(shí)現(xiàn)事件處理
- 綁定標(biāo)簽:onClick屬性(常用)
基于回調(diào)的事件處理
- 回調(diào)機(jī)制與監(jiān)聽(tīng)機(jī)制
** 包含的方法 **
boolean onKeyDown(int keyCode, KeyEvent Event):用戶按下某個(gè)按鍵時(shí)觸動(dòng)該方法
boolean onKeyLongPress(int keyCode,KeyEvent event):
boolean onKeyShortCut(int keyCode, KeyEvent event):當(dāng)一個(gè)鍵盤(pán)快捷鍵事件發(fā)生調(diào)用此方法
boolean onKeyUp(...):當(dāng)用戶松開(kāi)某個(gè)組件調(diào)用該方法
boolean onTouchEvent(MotionEvent event): 用戶觸發(fā)觸摸屏事件調(diào)用
boolean onTrackballEvent(MotionEvent event):觸發(fā)軌跡球事件調(diào)用
- ** 示例 ** :
public class MyButton extends Button{
public MyButton(Context Context, AttributeSet set){
super(context, set);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event){
super.onKeyDown(keyCode,KeyEvent);
Log.v("-crazyit.org-","the onKeyDown is in my button");
return true;//返回true皿哨,表明事件不會(huì)向外擴(kuò)散;
}
}
- 基于監(jiān)聽(tīng)與基于回調(diào)的處理模型的區(qū)別:
<pre> 事件源與事件監(jiān)聽(tīng)器是分離的,當(dāng)事件源上發(fā)生特定的事件時(shí)交給事件監(jiān)聽(tīng)器處理;對(duì)于基于回調(diào)的事件處理模型机隙,事件源與監(jiān)聽(tīng)器是統(tǒng)一的蜘拉,當(dāng)事件源發(fā)生特定事件時(shí)該事件還是由事件源本身負(fù)責(zé)處理
基于回調(diào)的事件的傳播
- 關(guān)于回調(diào)事件方法中的boolean返回值,其用于標(biāo)示該處理方法能否完全處理該事件有鹿,返回true表示可以并不會(huì)傳播出去旭旭,返回false則相反,該事件會(huì)傳播出去
- 若該事件可以傳播到該Activity葱跋,則該組件所發(fā)生的事件不僅會(huì)激發(fā)該組件的回調(diào)方法也會(huì)激發(fā)該Activity上的回調(diào)方法
重寫(xiě)onTouchEvent方法響應(yīng)觸摸屏事件
實(shí)例** 通過(guò)回調(diào)實(shí)現(xiàn)跟隨手指的小球 ** :
public class DrawView extends View{
public float currentX = 40;
public float currentY = 50;
//定義持寄,創(chuàng)建畫(huà)筆
Paint p = new Paint();
public DrawView(Context context,AttributeSet set){
super(context, set);
}
//重寫(xiě)onDraw()方法
@Override
public void onDraw(Canvas canvas){
super.onDraw(canvas);
p.setColor(Color.RED);
canvas.drawCircle(currentX, currentY, 15, p);
}
//創(chuàng)建onTouchEvent()
public boolean onTouchEvent(MotionEvent event){
//設(shè)置當(dāng)前組件的currentX與currentY屬性
this.currentX = event.getX();
this.currentY = event.getY();
//通知組件重繪
this.invalidate();
//返回true表明處理方法以經(jīng)處理完該事件
return true;
}
}
** xml清單: **
<LinearLayout>
<com.juanxincai.test.DrawView
android:orientation:xxx
android:layout_width:xxx
android:layout_height:xxx/>
</LinearLayout>
響應(yīng)系統(tǒng)設(shè)置事件
Configuration類(lèi)簡(jiǎn)介
程序可調(diào)用Aactivity的如下方法獲得Cconfiguration類(lèi)對(duì)象:
<pre> Configuration cfg = getResourses().getConfiguration();</pre>
該類(lèi)用于描述手機(jī)設(shè)備配置信息,具體方法參考
Configureration簡(jiǎn)介(自備梯子)