android事件
㈠ android keydown事件怎麼觸發
java">點擊返回鍵出發,需要在代碼中重寫如下方法:
@Override
publicbooleanonKeyDown(intkeyCode,KeyEventevent){
//TODOAuto-generatedmethodstub
if(keyCode==KeyEvent.ACTION_DOWN){
returntrue;
}
returnsuper.onKeyDown(keyCode,event);
}
㈡ android 是怎樣監聽事件
監聽事件,直接新建一個匿名的監聽介面,類似於下面這樣的:
b1.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Intent intet = new Intent(MainActivity.this,seekbar.class);
startActivity(intet);
//finish();
}
});
㈢ android 事件分發中 為什麼down事件不消費 後續事件也得不到消費
事件都是從dispatchTouchEvent開始的, 如果down事件不消費, 那麼在dispatchTouchEvent源碼中的mFirstTouchTarget就是空的. mFirstTouchTarget這個變數是記錄消費down事件的. 沒有消費down 那麼mFirstTouchTarget就是空. 其他事件進入dispatchTouchEvent後 會先判斷mFirstTouchTarget為空, 就判定事件被攔截了. 就不會繼續事件分發了. 也不會去執行onTouchEvent方法了.
至於Android這樣設計的道理? 因為如果down事件不接受, 就默認其他事件也不要了. 這也是為了提高性能, 畢竟move是一大串的. 如果不在down中這樣設計. 每個move都去判斷, 勢必會影響觸摸響應性能.
㈣ 請簡述什麼是android事件處理,並分析兩種android事件處理機制的實現過程和區別
UI編程通常都會伴隨事件處理,Android也不例外,它提供了兩種方式的事件處理:基於回調的事件處理和基於監聽器的事件處理。
對於基於監聽器的事件處理而言,主要就是為Android界面組件綁定特定的事件監聽器;對於基於回調的事件處理而言,主要做法是重寫Android組件特定的回調函數,Android大部分界面組件都提供了事件響應的回調函數,我們主要重寫它們就行。
一 基於監聽器的事件處理
相比於基於回調的事件處理,這是更具「面向對象」性質的事件處理方式。在監聽器模型中,主要涉及三類對象:
1)事件源Event Source:產生事件的來源,通常是各種組件,如按鈕,窗口等。
2)事件Event:事件封裝了界面組件上發生的特定事件的具體信息,如果監聽器需要獲取界面組件上所發生事件的相關信息,一般通過事件Event對象來傳遞。
3)事件監聽器Event Listener:負責監聽事件源發生的事件,並對不同的事件做相應的處理。
基於監聽器的事件處理機制是一種委派式Delegation的事件處理方式,事件源將整個事件委託給事件監聽器,由監聽器對事件進行響應處理。這種處理方式將事件源和事件監聽器分離,有利於提供程序的可維護性。
舉例:
View類中的OnLongClickListener監聽器定義如下:(不需要傳遞事件)
[java] view plainprint?
public interface OnLongClickListener {
boolean onLongClick(View v);
}
public interface OnLongClickListener {
boolean onLongClick(View v);
}
View類中的OnLongClickListener監聽器定義如下:(需要傳遞事件MotionEvent)
[java] view plainprint?
public interface OnTouchListener {
boolean onTouch(View v, MotionEvent event);
}
public interface OnTouchListener {
boolean onTouch(View v, MotionEvent event);
}
二 基於回調的事件處理
相比基於監聽器的事件處理模型,基於回調的事件處理模型要簡單些,該模型中,事件源和事件監聽器是合一的,也就是說沒有獨立的事件監聽器存在。當用戶在GUI組件上觸發某事件時,由該組件自身特定的函數負責處理該事件。通常通過重寫Override組件類的事件處理函數實現事件的處理。
舉例:
View類實現了KeyEvent.Callback介面中的一系列回調函數,因此,基於回調的事件處理機制通過自定義View來實現,自定義View時重寫這些事件處理方法即可。
[java] view plainprint?
public interface Callback {
// 幾乎所有基於回調的事件處理函數都會返回一個boolean類型值,該返回值用於
// 標識該處理函數是否能完全處理該事件
// 返回true,表明該函數已完全處理該事件,該事件不會傳播出去
// 返回false,表明該函數未完全處理該事件,該事件會傳播出去
boolean onKeyDown(int keyCode, KeyEvent event);
boolean onKeyLongPress(int keyCode, KeyEvent event);
boolean onKeyUp(int keyCode, KeyEvent event);
boolean onKeyMultiple(int keyCode, int count, KeyEvent event);
}
public interface Callback {
// 幾乎所有基於回調的事件處理函數都會返回一個boolean類型值,該返回值用於
// 標識該處理函數是否能完全處理該事件
// 返回true,表明該函數已完全處理該事件,該事件不會傳播出去
// 返回false,表明該函數未完全處理該事件,該事件會傳播出去
boolean onKeyDown(int keyCode, KeyEvent event);
boolean onKeyLongPress(int keyCode, KeyEvent event);
boolean onKeyUp(int keyCode, KeyEvent event);
boolean onKeyMultiple(int keyCode, int count, KeyEvent event);
}
三 比對
基於監聽器的事件模型符合單一職責原則,事件源和事件監聽器分開實現;
Android的事件處理機制保證基於監聽器的事件處理會優先於基於回調的事件處理被觸發;
某些特定情況下,基於回調的事件處理機制會更好的提高程序的內聚性。
四 基於自定義監聽器的事件處理流程
在實際項目開發中,我們經常需要自定義監聽器來實現自定義業務流程的處理,而且一般都不是基於GUI界面作為事件源的。這里以常見的app自動更新為例進行說明,在自動更新過程中,會存在兩個狀態:下載中和下載完成,而我們的程序需要在這兩個狀態做不同的事情,「下載中」需要在UI界面上實時顯示軟體包下載的進度,「下載完成」後,取消進度條的顯示。這里進行一個模擬,重點在說明自定義監聽器的事件處理流程。
4.1)定義事件監聽器如下:
㈤ Android可監聽的事件類型(提示:用戶事件和系統事件,用戶事件又分為按鍵事件和觸屏事件)
在android系統中,存在多種界面事件,如點擊事件,觸摸事件,焦點事件,和菜單事件
用戶事件和系統事件等,事件發生時,android界面框架調用界面控制項的事件處理函數對事件進行處理。
如:用戶事件:
按鍵事件:keyevent將傳遞給onkey()函數進行處理
觸屏事件:touchevent將傳遞給ontouch()函數進行處理。
㈥ android 什麼是粘性事件
1 Eeventbus 在處理消息通信的時候是比通常的出發辦法好用的得,最新使用了eventbus 的粘性事件 首先你需要傳遞一個消息bean,
EventBus.getDefault().postSticky(messageStatusResultBean);
2 調用上面的方法 就會把這個objoct 放到裡面
private final Map<Class<?>, Object> stickyEvents;
3 在要處理的地方獲取消息bean
@Subscribe(sticky = true, threadMode = ThreadMode.MAIN)
public void getPushMsg(MessageStatusResultBean messageStatusResultBean) {
}
㈦ Android事件有關函數getHistorySize是什麼含義
可以通過調用getHistorySize來獲得歷史的大小值,它可以返回當前事件可用的運動位置的數目。然後你可以通過使用一系列getHistorical*方法,並傳遞給它位置索引,來獲得每一個歷史事件的時間、壓力、大小和位置,如下面的代碼段所示:
java代碼:
int historySize = event.getHistorySize();
for (int i = 0; i < historySize; i++) {
long time = event.getHistoricalEventTime(i);
float pressure = event.getHistoricalPressure(i);
float x = event.getHistoricalX(i);
float y = event.getHistoricalY(i);
float size = event.getHistoricalSize(i);
//待實現:使用每一個點
}
復制代碼
用來處理運動事件的一般模式是首先處理每一個歷史事件,並在其後跟隨當前的MotionEvent值,如下面的代碼所示:
java代碼:
@Override
public boolean onTouchEvent(MotionEvent event) {
int action = event.getAction();
switch (action) {
case (MotionEvent.ACTION_MOVE) {
int historySize = event.getHistorySize();
for (int i = 0; i < historySize; i++) {
float x = event.getHistoricalX(i);
float y = event.getHistoricalY(i);
processMovement(x, y);
}
float x = event.getX();
float y = event.getY();
processMovement(x, y);
return true;
}
}
return super.onTouchEvent(event);
}
private void processMovement(float _x, float _y) {
// 待實現:對移動作出反應
}
㈧ android事件處理方式有哪些
現代的用戶界面,都是以事件來驅動的來實現人機交換的,而Android上的一套UI控制項,無非就是派發滑鼠和鍵盤事件,然後每個控制項收到相應的事件之後,做相應的處理。如Button控制項,就只需要處理Down、move、up這幾個事件,Down的時候重繪控制項,move的時候一般也需要重繪控制項,當up的時候,重繪控制項,然後產生onClick事件。在Android中通過實現OnClickListener介面的onClick方法來實現對Button控制項的處理。
對於觸摸屏事件(滑鼠事件)有按下有:按下、彈起、移動、雙擊、長按、滑動、滾動。按下、彈起、移動(down、move、up)是簡單的觸摸屏事件,而雙擊、長按、滑動、滾動需要根據運動的軌跡來做識別的。在Android中有專門的類去識別,android.view.GestureDetector。
對於按鍵(keyevent),無非就是按下、彈起、長按等。
㈨ android 中的click事件是什麼模式
1.在學習點擊事件之前呢.我們學習安卓控制項中的Textview,Button,redioButton,checkBox,等相關控制項是使用,在安卓中呢,TextView是許多的App開發的必備控制項,無論是大的項目還是小的項目都會有TextView的出現.接下來我們就從它開始講起,來簡單介紹這幾個控制項的是用方法.
TextView的使用方法:在所有的控制項中都有共有的方法,那就是寬度和高度,layout_weight=""和layout_height=""當然這兩個屬性是不可少的,在每個控制項只能都是需要設置的,但特殊情況除外啊,這個屬性大家可以根據自己的要求合理使用啊.
TextView中呢,還有一個屬性,那就是singleLine=""他是確定你所顯示 的文本是單行的.這個屬性比較簡單,可以自己打出來看看效果啊.在這里就不多說了啊.
android:text="@string/hello"//顯示文本信息.
android:textColor="#ff00"//為文字追加顏色
android:singleLine="true"//是否是單行顯示
android:ellipsize="marquee"//如果是一段很長的文本,內容長度超出了這個View的寬度,我們想要一行顯示,且超出部分在末端以省略號'……'表示,但實際上沒有這樣工作,而是文本超出的多餘的部分被截斷了
focusable:獲取焦點(不經常使用)
focusableInTouchMode:獲取觸摸模式下的焦點
marqueeRepeatLimit:滾動次數,裡面有個參數marquee_forever代表永遠滾動
lines:指的是最小和最大行都是指定的值,如果同時指定了 minlines, 在范圍還沒有超過minlines 的情況下,以 minlines為准,如果文本內容在minlines和 lines 之間的行數就顯示完畢,那麼有多少行就多少行,但是 lines 一定會影響 文本實際的顯示行數,但是整個 textview 的行數會被 minlines 影響
imageview: src:圖片有多大,顯示出來的就
2點擊事件的監聽和處理.
㈩ Android事件的downTime和eventTime有何區別
區別:DownTime() /是獲取按下開始時間,EventTime() //是獲取事件結束時間。
在android中,不管是DownTime,還是EventTime,都是MontionEvent類 的方法。當用戶觸摸屏幕時,將創建一個MontionEvent對象(event),可以通過這個對象獲取觸控事件的具體信息(比如觸摸的坐標event.getX(nID); //獲取第nID個觸控點的x位置 event.getY(nID); //獲取第nID個點觸控的y位置)。
補充:獲取到DownTime和eventTime,他們的時間差就是總共按下時花費時間(event.getEventTime()-event.getDownTime()))