日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

android怎么监听多点触摸_android 多点触控

發布時間:2023/12/16 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android怎么监听多点触摸_android 多点触控 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在android中多指觸控通過OnTouchListener監聽器監聽,觸控事件在onTouch方法中分析處理。

在單指觸控中,我們常用的三個方法ACTION_DOWN、ACTION_UP、ACTION_MOVE,在多指觸控中也會用到,不過用法稍有不同。

多指觸控中多了ACTION_POINTER_DOWN、ACTION_POINTER_UP兩種情況,這幾個情況的觸發用法在下面源碼中標注:

switch (event.getAction() &MotionEvent.ACTION_MASK) {case MotionEvent.ACTION_DOWN: //第一根手指按下時觸發

mode = 1;break;case MotionEvent.ACTION_POINTER_DOWN: //第二根或以上的手指按下時觸發

mode += 1;break;case MotionEvent.ACTION_UP: //所有手指都離開時觸發

mode = 0;break;case MotionEvent.ACTION_POINTER_UP: //當有兩根及以上手指觸碰屏幕,其一離開時觸發

mode -= 1;break;case MotionEvent.ACTION_MOVE: //此事件非常靈敏,只要有手指觸碰屏幕,便會一直觸發

if (mode >= 2) {

}break;

}

觸碰的手指數可用event.getPointerCount()方法獲取。

放大縮小:

此功能可通過手指之間的前后距離倍數來確定放大縮小的倍數,不這樣稍微麻煩了點,我們可以用ScaleGestureDetector來實現:

scaleGestureDetector = new ScaleGestureDetector(this, newScaleGestureDetector.OnScaleGestureListener() {

@Overridepublic booleanonScale(ScaleGestureDetector detector) {float factor =detector.getScaleFactor();float x =detector.getFocusX();float y =detector.getFocusY();

Show.log("onScale:" + factor + ";" + x + ";" +y);

matrix.postScale(factor, factor, x, y);

iv.setImageMatrix(matrix);return true;

}

@Overridepublic booleanonScaleBegin(ScaleGestureDetector detector) {

Show.log("onScaleBegin");return true;

}

@Overridepublic voidonScaleEnd(ScaleGestureDetector detector) {

Show.log("onScaleEnd");

}

});

iv=(ImageView) findViewById(R.id.img_test);

iv.setOnTouchListener(newOnTouchListener() {

@Overridepublic booleanonTouch(View v, MotionEvent event) {\

scaleGestureDetector.onTouchEvent(event);return true;

}

});

多指滑動:

先獲取各點的中點,而后根據中點的位移來進行判斷,下面是一個簡單樣例:

public class MainActivity extendsActivity {privateImageView iv;

Matrix matrix= newMatrix();privatePointF startPoint;privatePointF nowPoint;

@Overrideprotected voidonCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

startPoint= newPointF();

nowPoint= newPointF();

iv=(ImageView) findViewById(R.id.img_test);

iv.setOnTouchListener(newOnTouchListener() {

@Overridepublic booleanonTouch(View v, MotionEvent event) {switch (event.getAction() &MotionEvent.ACTION_MASK) {caseMotionEvent.ACTION_DOWN:caseMotionEvent.ACTION_POINTER_DOWN:

setEventPoint(event,startPoint);break;caseMotionEvent.ACTION_MOVE:

setEventPoint(event,nowPoint);

Show.log("move:"+getDistance(startPoint,nowPoint));

matrix.postTranslate(nowPoint.x-startPoint.x,nowPoint.y-startPoint.y);

startPoint.set(nowPoint.x,nowPoint.y);break;caseMotionEvent.ACTION_UP:

setEventPoint(event,nowPoint);

Show.log("end:"+getDistance(startPoint,nowPoint));break;

}

iv.setImageMatrix(matrix);return true;

}

});

}private voidsetEventPoint(MotionEvent event, PointF startPoint) {float x = 0, y = 0;final int pointerCount =event.getPointerCount();for (int i = 0; i < pointerCount; i++) {

x+=event.getX(i);

y+=event.getY(i);

}

x= x /pointerCount;

y= y /pointerCount;

startPoint.set(x,y);

}private floatgetDistance(PointF point1,PointF point2){float x = point1.x-point2.x;float y = point1.y-point2.y;return (float) Math.sqrt(x * x + y *y);

}

}

總結

以上是生活随笔為你收集整理的android怎么监听多点触摸_android 多点触控的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。