最近專案需要乙個多點觸控縮放的功能。然後上網查了下資料 總結一下:
首先android sdk版本很重要,比如你在androidmanifest.xml中指定android:minsdkversion="4" 並且建工程的時候選的是android 2.2就表示你的應用相容android1.6~android2.2
之間的版本。但是多點觸控的api在1.6~~2,1~~,2,2~~三個版本中都是不一樣的。比如android2.2中ontouchevent(motionevent event) 這裡可以用event.getactionmasked()
表示用於多點觸控檢測點。但在1.6和2.1中並沒有event.getactionmasked()這個方法,查原始碼後發現其實他就是吧event.getaction()& motionevent.action_mask封裝了一下。
對於這些小細節我們要特別注意,因為這關乎版本相容問題,也許你在2.2的裝置上執行沒什麼問題,但1.6或者2.1就會出個什麼問題之類的。所以對於1.6以後新增加的功能,要特別注意api
的使用。1.5就暫不考慮了。
接下來看**:
1 package laahaa.framework;2 3
4 5 import android.content.context;
6 import android.graphics.pointf;
7 import android.util.attributeset;
8 import android.util.floatmath;
9 import android.view.motionevent;
10 import android.view.su***ceholder;
11 12 /**
13 *
14 * 遊戲畫布
15 */
16 public class gameview2x extends gameview implements su***ceholder.callback
26 27 public boolean ontouchevent(motionevent event)
57 /**
58 * 表示新的距離比兩個手指剛觸碰的距離小
59 */
60 if (newdist + 10 < olddist)
65 }
66 super.actionmove(event);
67 68 break;
69 }
70 71 return true;
72 }
73 74 private float spacing(motionevent event)
79 80 private void midpoint(pointf point, motionevent event)
85 }
這裡要注意下gameview2x表示2.0以上的版本 他繼承於我自己寫的低版本的gameview。因為有很多重複**繼承是必須的。最後要注意下:獲取當前應用的sdk版本**為:
int sdkversion=integer.parseint(build.version.sdk);
你需要在最開始初始化的時候執行它,寫入gameconfig中比較好,後面單例呼叫就好了。或者不喜歡單例的直接static final 也行。然後再選擇gameview的時候 加個if判斷,
if(sdkversion
{}else
{}好了,這裡的多點觸控放大比較簡單,其實可以根據前距離/後距離的比值來動態設定縮放。這只是個簡單的例子。
ps:最近發現 ontouchevent事件中的引數motionevent,它有乙個getsize()方法。在乙個點的時候,該方法永遠返回0,而在兩個觸電的時候,該方法則根據兩點相對位置變化而返回不同的值
android 多點觸控
下面是一些常用的函式解釋 copy過來滴.event.getaction 獲取觸控動作比如action down event.getpointercount 獲取觸控點的數量,比如2則可能是兩個手指同時按壓螢幕 event.getpointerid nid 對於每個觸控的點的細節,我們可以通過乙個迴...
關於iPhone多點觸控
雖然這個問題很簡單,但是對於我這接觸兩天的菜鳥來說也弄了很久,網上又找不到相關的解決方法,避免其他人和我一樣,還是記錄一下 一般網上找到的教程是這麼教 void touchesbegin nsset touches withevent uievent event 但是這裡面首先nsarray這個累不...
android如何怎麼禁止多點觸控
不積跬步無以至千里 在乙個頁面裡做了個對講的操作,對講需要長按操作,但是發現碰觸介面其他位置,會中斷,通過監聽這個view的ontouchevent,其中的motionevent中的action,發現當觸碰別的地方的時候,會把這個按鈕的down事件中斷。因此這裡是多點觸碰的問題。多點觸控的方法如下 ...