大佬教程收集整理的这篇文章主要介绍了android – 处理触摸事件 – onInterceptTouchEvent和onTouchEvent,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
但是当我尝试实现onInterceptTouchEvent时,我遇到了错误.
这是我的代码:
public class Game extends Activity { @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.game_activity); //other code.... } } @Override public Boolean onInterceptTouchEvent(MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_DOWN: break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: swipeScreen(); //if action recognized as swipe then swipe break; case MotionEvent.ACTION_MOVE: float x = event.getX(); float y = event.getY(); float xDelta = Math.abs(x - mLastX); float yDelta = Math.abs(y - mLastY); if (yDelta > xDelta) { return true; } break; } return false; } @Override public Boolean onTouchEvent(MotionEvent event) { ButtonOnClick(); //if not a swipe,then button click return true; }
首先错误说明:Game类型的onInterceptTouchEvent(MotionEvent)方法必须覆盖或实现超类型方法
然后,而不是返回true我将代码更改为:return super.onInterceptTouchEvent(event)但后来我得到一个错误说:对于类型Activity,未定义onInterceptTouchEvent(MotionEvent)方法
有人可以帮忙吗?
onInterceptTouchEvent()
是ViewGroup类中的方法,而不是来自Activity.
您可以通过将逻辑从onInterceptTouchEvent()移动到dispatchTouchEvent(MotionEvent ev)
来实现所需的行为.请记住调用dispatchTouchEvent(MotionEvent ev)的超类实现来处理应该正常处理的事件.
另请注意,只有在delta大于system constant for touch slop时才应考虑移动.我建议用户通过测试yDelta / 2>确保用户正在按照您想要的方向滑动. xDelta而不是yDelta> xDelta.
public class Game extends Activity { privatE int mSlop; private float mDownX; private float mDownY; private Boolean mSwiping; @Override protected void onCreate(Bundle savedInstanceStatE) { super.onCreate(savedInstanceStatE); setContentView(R.layout.game_activity); ViewConfiguration vc = ViewConfiguration.get(this) mSlop = vc.getScaledTouchSlop(); //other code.... } @Override public Boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: mDownX = ev.getX(); mDownY = ev.getY(); mSwiping = false; break; case MotionEvent.ACTION_CANCEL: case MotionEvent.ACTION_UP: if(mSwiping) { swipeScreen(); //if action recognized as swipe then swipe } break; case MotionEvent.ACTION_MOVE: float x = ev.getX(); float y = ev.getY(); float xDelta = Math.abs(x - mDownX); float yDelta = Math.abs(y - mDownY); if (yDelta > mSlop && yDelta / 2 > xDelta) { mSwiping = true; return true; } break; } return super.dispatchTouchEvent(ev); } }
以上是大佬教程为你收集整理的android – 处理触摸事件 – onInterceptTouchEvent和onTouchEvent全部内容,希望文章能够帮你解决android – 处理触摸事件 – onInterceptTouchEvent和onTouchEvent所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。