Android 中螢幕點選事件的實現
在android下,事件的發生是在監聽器下進行,android系統可以響應按鍵事件和觸控式螢幕事件,事件說明如下:
常用實現OnClickListener,OnTouchListener,OnFocusChangeListener,OnKeyListener
1.onClick(View v)一個普通的點選按鈕事件
2.boolean onKeyMultiple(int keyCode,int repeatCount,KeyEvent event)用於在多個事件連續時發生,用於按鍵重複,必須過載@Override實現
3.boolean
onKeyDown(int keyCode,KeyEvent event)
4.boolean onKeyUp(int keyCode,KeyEvent event)用於在按鍵進行釋放時發生
5.onTouchEvent(MotionEvent event)觸控式螢幕事件,當在觸控式螢幕上有動作時發生
6.boolean onKeyLongPress(int keyCode, KeyEvent event)當你長時間按時發生
8.abstract boolean onDown(MotionEvent e); 單擊,觸控式螢幕按下時立刻觸發
9.abstract
boolean onSingleTapUp(MotionEvent e); 擡起,手指離開觸控式螢幕時觸發(長按、滾動、滑動時,不會觸發這個手勢)
10.abstract void onShowPress(MotionEvent e); 短按,觸控式螢幕按下後片刻後擡起,會觸發這個手勢,如果迅速擡起則不會
11.abstract void onLongPress(MotionEvent e); 長按,觸控式螢幕按下後既不擡起也不移動,過一段時間後觸發
12.abstract boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY); 滾動,觸控式螢幕按下後移動
13.abstract
boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY); 滑動,觸控式螢幕按下後快速移動並擡起,會先觸發滾動手勢,跟著觸發一個滑動手勢
14.OnDoubleTapListener的介面有這幾個:(1)abstract boolean onDoubleTap(MotionEvent e); 雙擊,手指在觸控式螢幕上迅速點選第二下時觸發
(2)abstract boolean onDoubleTapEvent(MotionEvent e); 雙擊的按下跟擡起各觸發一次
(3)abstract boolean onSingleTapConfirmed(MotionEvent e); 單擊確認,即很快的按下並擡起,但並不連續點選第二下
有時候我們並不需要處理上面所有手勢,方便起見,Android提供了另外一個類SimpleOnGestureListener實現瞭如上介面,我們只需要繼承SimpleOnGestureListener然後過載感興趣的手勢即可。
例:1.獲得相關物件,設定控制元件監聽器
Button button=(Button) findViewById(R.id.button1);
//設定監聽
button.setOnClickListener(newButton.OnClickListener()
{
@Override
publicvoid onClick(View v) {
//TODO Auto-generated method stub
DisplayToast("事件觸發成功");
}
});
請注意這裡末尾使用的是分號“;這裡就是獲得button的例項,然後對他進行監聽,當用戶點選時就會發生onClick事件,這裡還用到一個方法,就是顯示一個短訊息,在螢幕停留幾秒鐘就會自動消失,其方法如下:
publicvoid DisplayToast(String str)
{
Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
當然你也可以設定顯示長點,即Toast.LENGTH_SHORT改為Toast.LENGTH_LONG
2.當按鍵按下是發生的事件
public boolean onKeyDown(int keyCode,KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_0:
DisplayToast("你按下數字鍵0");
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
DisplayToast("你按下中間鍵");
break;sss
case KeyEvent.KEYCODE_DPAD_DOWN:
DisplayToast("你按下下方向鍵");
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
DisplayToast("你按下左方向鍵");
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
DisplayToast("你按下右方向鍵");
break;
case KeyEvent.KEYCODE_DPAD_UP:
DisplayToast("你按下上方向鍵");
break;
case KeyEvent.KEYCODE_ALT_LEFT:
DisplayToast("你按下組合鍵alt+←");
break;
}
return super.onKeyDown(keyCode, event);
}
這裡所有的keyCode都囊括了,這只是幾個比較典型的例子,效果如下:
3.當按鍵彈起時發生的事件,程式碼如下:
publicboolean onKeyUp(int keyCode,KeyEvent event)
{
switch(keyCode)
{
case KeyEvent.KEYCODE_0:
DisplayToast("鬆開數字鍵0");
break;
case KeyEvent.KEYCODE_DPAD_CENTER:
DisplayToast("鬆開中間鍵");
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
DisplayToast("鬆開下方向鍵");
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
DisplayToast("鬆開左方向鍵");
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
DisplayToast("鬆開右方向鍵");
break;
case KeyEvent.KEYCODE_DPAD_UP:
DisplayToast("鬆開上方向鍵");
break;
case KeyEvent.KEYCODE_ALT_LEFT:
DisplayToast("鬆開組合鍵alt+←");
break;
}
returnsuper.onKeyUp(keyCode, event);
}
4.觸控式螢幕事件,當用手或者用筆在觸控式螢幕上做動作是發生,相關程式碼如下:
public boolean onTouchEvent(MotionEvent event)
{
int Action = event.getAction();
float X = event.getX();
float Y = event.getY();
mAction.setText("Action = " + Action);
mPosition.setText("Position = (" + X + " , " + Y + ")");
return true;
}
其中 Action變數會得到三個返回值,代表三種不同的觸控階段
Action = 0 : ACTION_DOWN
Action = 1 : ACTION_UP
Action = 2 ; ACTION_MOVE 就是拖動的感覺
5.連續點選按鍵時發生的事件
Publicboolean onKeyMultiple(int keyCode,int repeatCount,KeyEvent event)
{
Return super.onKeyMultiple(keyCode, repeatCount, event);
}