2012-09-12 68 views
2

今天我得到了一个触摸事件处理Android自定义views.In问题,在这种情况下,我已创建父视图调用weekview和chiled调用weekdayview.i希望实现像singleTap触摸事件,只在子视图LongPress和当我滑动父母或孩子我想滚动父视图。当我在两个视图中实现触摸事件它不工作。触摸事件处理Android的父母和孩子的自定义视图

enter image description here

谁能帮助我在this.It真的对我很有帮助。 谢谢

+0

我认为,如果触摸事件是子视图,父视图将永远不会收到通知。因此,最好使用GestureDetector,在您的Child视图中,onTouchEvent中,将事件分派为手势,并在父视图上处理。 – Tom

+0

我在这两个视图中使用GestureDetector滚动部分完成父视图,它是OK.but我想做一些事儿上的孩子view.I返回false onDown方法在子view.then滚动父母工作和触摸子视图上的事件不适用 – Sanath

回答

0

设置您的滑动速度(检测用户的滑动意图)并覆盖子视图中的onTouchEvent()。 在这里,调用super.onTouchEvent()并返回,它调用你的父视图。处理父视图中的事件。

2
class ChildView extends View { 


    public void setGestureDetector (GestureDetector g) 
    { 
     gesture = g; 
    } 

    @Override 
    public boolean onTouchEvent (....) 
    { 
     return gesture.onTouchEvent (....); // touch event will dispatch to gesture 
    } 
} 

class ParentView extends View implements GestureDetector.OnGestureListener { 

    gesture = new GestureDetector (this); 

    child = new ChildView (...); 
    child.setGestureDetector (gesture); 

    @Override 
    public boolean onTouchEvent (..) 
    { 
     // handle your parent touch event here 
    } 

    public boolean onDown (...) 
    { 
     return true; 
    } 

    public boolean fling (...) 
    { 
     // here to handle child view fling 
    } 


} 

这是比索代码(不是真正的Android的Java),让您能使用GestureDetector的概念,你可以处理来自子视图在父视图的所有事件。当我在我的android手机上进行测试时,ChildView中的onTouchEvent并没有很好地识别ACTION_UP,所以即使你刷过了你的子视图,有时候它也不起作用(取决于ACTION_UP)。

所以,如果你想要写上你的孩子更多准确刷卡,最好在写欧文手势检测类,并在你的ChildView,你可以做到这一点 -

float oldX; 
float distanceX; 

public boolean onTouchEvent (MotionEvent event...) 
{ 
    if (event.getAction == MotionEvent.ACTION_DOWN) { 
     // handle down 
     oldX = event.getX(); 
    } 

    if (event.getAction == MotionEvent.ACTION_MOVE { 
     // handle move 
     distanceX = event.getX() - oldX; // more accurate 

     gesture.onSwipe (distanceX); // your own gesture class 
    } 


} 
+0

我使用的东西非常接近这个实现。我已经创建了父母和孩子的手势检测器。这种方式与你的方法不同。 – Sanath

+0

我认为子视图会派发事件到你的父视图,所以你可以在你的父视图ontouchevent中处理一排(swipe),你也可以处理swipe,在你的onDown事件中返回true。我已经完成了simliar,我知道fling有一个bug,有时在我的android手机中,onTouchEvent无法很好地识别ACTION_UP,所以这次不会触发。 – Tom

+0

对不起,我没有写错码 – Tom

相关问题