2012-09-12 60 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

相關問題