Android View的onTouch和onClick和onLongClick事件

來源:互聯網
上載者:User

標籤:android   style   blog   color   io   ar   strong   sp   div   

這三個事件的調用順序是:

onTouch->onLongClick->onClick

先看這三個事件的處理函數:

  1. public boolean onTouch(View v, MotionEvent event);
  2. public boolean onLongClick(View v);
  3. public void onClick(View v);

看到三個函數的傳回值,只有onClick是void,而onTouch和onLongClick是boolean,原因是系統對這些事件的處理是有條件,必須滿足條件才會觸發相應的事件處理函數。

事件在事件鏈中進行傳遞,如果一級沒有處理,將向下一級傳遞,直到傳遍整個事件鏈。

onTouch如果返回true,則表明對該事件做了處理,不會繼續傳遞該事件在事件鏈中;onLongClick如果返回true,則表名對該事件做了處理,不會繼續傳遞該事件在事件鏈中。

如果希望View中onClick事件和onTouch事件並存,且這兩個事件在一個按鈕上分別觸發,則可以直接去掉onClick事件,直接在onTouch事件中細分,如果按下的位置和抬起的位置相同,即startX==lastX時,認為是onClick事件;代碼如下:

@Override    public boolean onTouch(View v, MotionEvent event) {        switch (event.getAction()) {        case MotionEvent.ACTION_DOWN:{            //記錄按下的點的X座標            startX = event.getRawX();            break;        }        case MotionEvent.ACTION_UP:            //記錄抬起的點的X座標, 若兩次相等,觸發了點擊事件,否則是滑動事件            float LastX = event.getRawX();            if(startX == LastX){                Toast.makeText(getApplication(), "點擊了", Toast.LENGTH_SHORT).show();            }else{                Toast.makeText(getApplication(), "滑動了", Toast.LENGTH_SHORT).show();            }                         break;        case MotionEvent.ACTION_MOVE:{            break;        }         }        return false;    }

 

Android View的onTouch和onClick和onLongClick事件

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.