博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
说说 MultiTouch 那点事
阅读量:6687 次
发布时间:2019-06-25

本文共 2866 字,大约阅读时间需要 9 分钟。

hot3.png

最近在做一个 小应用, 涉及到的跟以前接触的 不太一样。 这次是  onTouchEvent 和 OnGestureListener接口的 结合, 本身继承SurfaceView...

拿出来跟大家讨论一下 看看有没有更好的办法!自己定义了好多 flag, 自己总觉得有更简洁的办法。。。

上码吧! 注释不多!重在意会蛤!

@Override	public boolean onTouchEvent(MotionEvent event) { 				int pointerCounter = event.getPointerCount();		int action = (event.getAction() & event.getActionMasked());		gd.onTouchEvent(event);		 		if( pointerCounter <= 2){			switch (action) {			case MotionEvent.ACTION_DOWN:				int X1 = (int) event.getX(0);				int Y1 = (int) event.getY(0);				this.checkCollection(X1, Y1);				tempForId [0] = currentBallId;				tempForCollision [0] = currentBallId;				Log.e(TAG, "first===getX(0)===getY(0)===>DOWN"  + X1 + ":" + Y1 + tempForCollision [0]);				if(touched){					longFlag = true;					secondTouched = false;					firstTouchenCanMove = true;				}								break;			case MotionEvent.ACTION_POINTER_DOWN:				int X2 = (int) event.getX(1);				int Y2 = (int) event.getY(1);				if(touched & (pointerCounter > 1) ){					this.checkCollection(X2, Y2);					tempForId [1] = currentBallId;					Log.d(TAG, "second===getX(1)===getY(1)===>DOWN"  + X2  + ":" + Y2);					secondTouched = true;				}else{					firstTouchenCanMove = false;					secondTouched = false;				}				longFlag = false;				break;			case MotionEvent.ACTION_MOVE:								if (firstTouchenCanMove) {					X1 = (int) event.getX(0);					Y1 = (int) event.getY(0);					this.touchMoveBalls(tempForId [0], X1, Y1);					this.tempMoveCollisionCheck(tempForCollision[0]);					Log.d(TAG, "first===getX(0)===getY(0)===>MOVE" + X1 + ":" + Y1);					if (secondTouched){						X2 = (int) event.getX(1);						Y2 = (int) event.getY(1);						this.touchMoveBalls(tempForId [1], X2, Y2);						Log.e(TAG, "second===getX(1)===getY(1)===>MOVE"  + X2 + ":" + Y2);					}else{						secondTouched = false;						touched = false;					}				}								longFlag = false;				afterMoveSendPdFlag = false;				break;			case MotionEvent.ACTION_POINTER_UP:				secondTouched = false;				touched = false;				longFlag = false;				firstTouchenCanMove = false;				break;			case MotionEvent.ACTION_UP:				secondTouched = false;				if (firstTouchenCanMove ) {					if(afterMoveSendPdFlag){						if(pdSendCheckForLongTouch){							this.sendToPd();							Log.i(TAG, "first pointer======>up, SEND pd");						}					}					touched = false;					afterMoveSendPdFlag = true;					longFlag = false;					pdSendCheckForLongTouch = true;					secondTouched = false;					firstTouchenCanMove = false;				}								break;			}// close events switch loop		}//end of if (pointerCounter <= 2)		return true; //return to void onTouchEvents()	}

@Override	public void onLongPress(MotionEvent e) {		// TODO Auto-generated method stub		if (longFlag){//		Log.d(TAG, "onLongPress");		pdSendCheckForLongTouch = false;		Toast.makeText(this.myContext, "onLongPress", Toast.LENGTH_SHORT).show();		}	}

转载于:https://my.oschina.net/huasolna/blog/85994

你可能感兴趣的文章
Git常用命令
查看>>
异常,File,递归,IO流
查看>>
百度地图、ECharts整合HT for Web网络拓扑图应用
查看>>
Unity查找子物体的方式-怎么查找GameObject
查看>>
大数据学习系列之三 ----- HBase Java Api 图文详解
查看>>
cookie和session
查看>>
关于前端复用的构思
查看>>
微信小程序连接本地接口(转)
查看>>
小白的正则表达式学习之旅-02
查看>>
学习C语言必须知道的理论知识(第三章-数据类型的分类)
查看>>
hdu 素数环
查看>>
H3C CAS 介绍 & 基本概念
查看>>
xxx
查看>>
openSUSE 安装 Caffe
查看>>
你可能没注意的CSS单位
查看>>
咱计算机专业的人,能不能不那么特别地彰显对语文的无知?——再谈面向对象......
查看>>
foreach Transform 同时chils.setParent引起的bug
查看>>
AES加密--适用于RC2、RC4和Blowfish
查看>>
如何强制删除一个apk
查看>>
SHA算法摘要处理
查看>>