1. 程式人生 > >Android 中螢幕點選事件的實現

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);
}