我有一个水平多个relativelayout视图的滚动视图...一个数据库中的每个记录...一个以编程方式创建.
我需要确定哪些视图受某些手势影响...单击,双击和左/右滑动.
当然点击我能够得到:
RelativeLayout rlView = new RelativeLayout(this); rlView.setId(10000+myrecordid); rlView.setOnClickListener(myviewclick);
和myviewclick:
private View.OnClickListener myviewclick = new View.OnClickListener() { public void onClick(View v) { Integer i=v.getId()-10000; // Do some processing on this view } };
从我在网上找到的,我试图通过这种方式获得手势:
rlView.setOnTouchListener(myviewtouch);
使用此代码:
private View.OnTouchListener myviewtouch = new View.OnTouchListener(){ public boolean onTouch(View v, MotionEvent event) { return gestureDetector.onTouchEvent(event); } GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { Log.i("MYLOG","double tap"); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Log.i("MYLOG","SingleTapConfirmed"); return true; } @Override public void onLongPress(MotionEvent e) { Log.i("MYLOG","LongPress"); } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { if (e1.getX()根据MYLOG,我正在根据需要采取适当的姿态.问题是,我不知道如何获取手势所在的视图ID.我知道它是在
onTouch
但是调用了gestureDetector.OnTouchEvent
确定动作......我在这一点上迷失了.我在StackOverflow和其他网站上搜索了几个小时...他们都显示了如何确定手势的差异......但是无法找到关于使用多个视图的任何内容,我可以使用它.
任何帮助,将不胜感激.
1> Peter..:我想我明白了.可能不是最优雅的方式,并且由于以这种方式处理它可能存在其他"问题",但是现在它可以工作.但如果其他人发现这个问题,我就是这样解决的:
以下是我修改过的代码的解决方法.我添加了一个名为的公共变量
vTouch
:private View.OnTouchListener myviewtouch = new View.OnTouchListener(){ public View vTouch; public boolean onTouch(View v, MotionEvent event) { vTouch=v; return gestureDetector.onTouchEvent(event); } GestureDetector gestureDetector = new GestureDetector(new GestureDetector.SimpleOnGestureListener() { @Override public boolean onDoubleTap(MotionEvent e) { Integer viewId=vTouch.getId(); Log.i("MYLOG","double tap in view: "+viewId); return true; } @Override public boolean onSingleTapConfirmed(MotionEvent e) { Integer viewId=vTouch.getId(); Log.i("MYLOG","SingleTapConfirmed in view: "+viewId); return true; } @Override public void onLongPress(MotionEvent e) { Integer viewId=vTouch.getId(); Log.i("MYLOG","LongPress in view: "+viewId); } public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { Integer viewId=vTouch.getId(); if (e1.getX()通过使用内部公共变量,
vTouch
我现在可以引用每个手势事件中的视图,其中需要手势恰好在其中的"视图".