編輯:關於Android編程
Android多點觸控技術跟Linux輸入子系統緊密相關。本文將從應用的角度說明Android多點觸控技術的接口和應用。
一、多點觸控場景分析
網絡上有關Android多點觸控技術的文章多見於兩點拉伸進行圖片放大縮小。對於,這個場景有兩個特點:
1)兩點,而不是更多點;
2)對於觸點的移動事件(MotionEvent.ACTION_MOVE),只需要計算兩點的距離,進而判斷兩個點之間的距離是變大還是縮小,實現圖片放大或者縮小。
這個過程並不需要記錄這兩個點和之前的兩個點的關系。這樣講比較抽象,我們可以用一個例子來解釋。如下圖:
假設一個人拿著5支筆同時寫linux這個單詞的一個字母,那就得知道當前的5個觸點裡面的每個觸點和之前的觸點的對應關系,才能做到一支筆畫一個字母。
這個場景基本上能夠覆蓋到android多點觸控的所有接口的應用了。我們先來介紹接口,最後給出多點觸控的應用框架,它理論上可以處理很多點的觸控,而不僅僅是2點或者5點。
二、Android多點觸控接口
1.onTouchEvent
重載Activity的onTouchEvent接口以處理觸控信息。
public booleanonTouchEvent(MotionEvent event)
2.event.getAction
該接口與MotionEvent.ACTION_MASK想與可以得到觸控按鍵的類型,如按下、彈起和移動。
1)MotionEvent.ACTION_DOWN 第一個觸控點按下。
2)MotionEvent.ACTION_POINTER_DOWN 屏幕上已經有1個或者多個觸點的情況下再按下一個點。
3)MotionEvent.ACTION_UP 最後一個觸點彈起
4)MotionEvent.ACTION_POINTER_UP 非最後一個觸點彈起。
5)MotionEvent.ACTION_MOVE 觸點移動事件
3.event.getActionIndex()
獲得觸控點的索引,其代表觸控點在所有觸控點中的序號。例如A、B、C三個點依次按下,那麼分別對應的index是0、1、2。假設B點彈起,此時A、C的index將是0、1。這時假如新按一個點D,那A、C、D的index將是0、1、2。
從中我們發現,C點的index會因為其他點的彈起而變化。所以不能用該值來跟蹤同一個點。
4.event.getPointerId(actionIndex)
通過觸控點索引來獲得觸控點的唯一標識。其自觸點被按下開始,直到彈起,該值都不會發生變化,其是觸點的一個身份ID。例如A、B、C三個點依次按下,那麼分別對應的ID是0、1、2。假設B點彈起,此時A、C的ID依然是0、2。這時假如新按一個點D,那A、C、D的ID將是0、2、1。新增的觸點的ID會從0開始遞增,發現未用值即拿來用。
5.獲得觸點坐標
event.getX(actionIndex)、event.getY(actionIndex)獲得觸點距離所屬的View的坐標。event.getRawX(actionIndex)、event.getRawY(actionIndex)獲得觸點距離屏幕左上角的坐標。
三、多點觸控應用框架
對於側滑刪除已經是見慣不慣的了,我也一直有寫類似QQ那樣的側滑刪除控件的想法,雖然研究一段時間的自定義View,然對自定義ViewGroup實戰還是較少,並且側滑刪除還要
本文要實現仿微信微信底部菜單欄+頂部菜單欄,采用ViewPage來做,每一個page對應一個XML,當手指在ViewPage左右滑動時,就相應顯示不同的pa
本篇使用到的Android Studio版本為1.0, Eclipse ADT版本22.3.0。 主要介紹兩種導入方式: 先用Eclipse導出為Gradle build
一、什麼是加殼?加殼是在二進制的程序中植入一段代碼,在運行的時候優先取得程序的控制權,做一些額外的工作。大多數病毒就是基於此原理。二、加殼作用加殼的程序可以有效阻止對程序