我正在開發自定義ViewGroup。它是某種圓形菜單(類似於android相機應用程序中的選項菜單)。自定義ViewGroup.dispatchTouchEvent()無法正常工作
我設法佈置並正確繪製兒童。我不得不這樣做的另一件事是覆蓋觸摸事件調度:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
for (int i=0; i<getChildCount(); i++) {
CircularView child=(CircularView) getChildAt(i);
if (child.viewMetrics.containsPoint(ev.getX(), ev.getY())) {
child.dispatchTouchEvent(ev);
return true;
}
}
return false;
}
我通過孩子和調度事件循環,如果事件的座標屬於任何人(child.viewMetrics.containsPoint()
方法調用,雙重檢查,正常工作)。
似乎工作,但它並不完美。我注意到問題:當我點擊時,握住我的手指並稍微移動它,點擊就會中斷。 Here's the demo。
我看着superclass implementation,並有大量的代碼。我的第一個想法是複製它,但它取決於許多私人課程。
我如何確保觸摸事件的正確調度的作品?(不僅點擊,但所有其他手勢以及?) 如果沒有簡單的方法來做到這一點,我將不勝感激任何意見或建議移植默認實現或任何鏈接到有關該主題的有用信息。
作爲座標,我離開他們的是(爲了方便起見,所有的孩子使用相同的座標相對於圓心繫統)。如果我做短的點擊,事件被正確地發送。此外,子節點('CircularView'及其子節點)僅覆蓋繪圖方法(因此可能不會發送ACTION_CANCEL,但我認爲需要再次檢查)。至於你的其他建議,我會盡快嘗試。 –
似乎座標是這種情況。我檢查了默認行爲,它們在事件分派給孩子之前被修改。謝謝你的幫助! –