Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android事件處理方法總結-基於回調的事件處理

Android事件處理方法總結-基於回調的事件處理

編輯:關於Android編程

一、Android中的事件處理方法

事件處理:響應用戶UI動作,提高應用程序交互性

1、基於監聽的事件處理機制

2、基於回調的事件處理機制

3、Handler消息處理

前面我們已經介紹了Android事件處理方法總結-基於監聽,這裡我們總結一下Android事件處理方法總結-基於回調

二、基於回調的事件處理機制詳解

1、回調事件處理原理

監聽事件處理是事件源與事件監聽器分開的

而基於回調的事件處理UI組件不但是事件源,而且還是事件監聽器,通過組件的相關回調方法處理對應的事件

2、回調事件應用步驟

Ⅰ. 自定義View類,繼承自需要的View UI類。ex :自定義MyButton按鈕類 extends 基礎Button類

Ⅱ. 復寫回調函數。ex:public boolean onTouchEvent(MotionEvent event)

每一個事件回調方法都會返回一個boolean值,①.如果返回true:表示該事件已被處理,不再繼續向外擴散,②.如果返回false:表示事件繼續向外擴散

android.view.View類提供了很多回調方法,ex:onKeyDown監測鍵盤按下....,具體參考API文檔

3、回調事件應用示例

demo:點擊按鈕後,Toast彈出按鈕被觸碰的事件信息

自定義View類MyButton,並重寫事件回調方法

packagecom.yihui.ui;

importandroid.content.Context;

importandroid.util.AttributeSet;

importandroid.util.Log;

importandroid.view.MotionEvent;

importandroid.widget.Button;

importandroid.widget.Toast;

publicclassMyButtonextendsButton{

privatestaticfinalStringTAG="EventCallBack";

publicMyButton(Contextcontext,AttributeSetattrs){

super(context,attrs);

}

/*重寫onTouchEvent觸碰事件的回調方法*/

@Override

publicbooleanonTouchEvent(MotionEventevent){

Log.i(TAG,"我是MyButton,你觸碰了我:"+event.getAction());

Toast.makeText(getContext(),"我是MyButton,你觸碰了我:"+event.getAction(),0).show();

returnfalse;//返回false,表示事件繼續向外層(即父容器)擴散

}

}

布局文件xml:activity_main.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_centerInParent="true"

android:text="碰碰我試試"/>

Activiy,同樣也復寫了事件回調方法,測試事件的擴散

packagecom.yihui.eventhandler;

importandroid.os.Bundle;

importandroid.app.Activity;

importandroid.util.Log;

importandroid.view.MotionEvent;

importandroid.widget.Toast;

publicclassMainActivityextendsActivity{

privatestaticfinalStringTAG="EventCallBack";

@Override

protectedvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

}

@Override

publicbooleanonTouchEvent(MotionEventevent){

Log.i(TAG,"我是MainActivity,發現觸碰事件:"+event.getAction());

Toast.makeText(MainActivity.this,"我是MainActivity,發現觸碰事件!:"+event.getAction(),0).show();

returntrue;

}

}

測試效果:

 

\

 

 

\

 

Ps:注意Activity裡面的onTouchEvent事件被觸發了2次,是因為第一次ACTION_DOWN,第二次是ACTION_UP

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved