2011-12-28 25 views
2

後,我有一個列表視圖,其中列表中的項目有以下背景繪製的Android StateListDrawable保持按下多點觸控

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@color/transparent" /> 
    <item android:state_pressed="true" 
    android:drawable="@drawable/collection_item_gradient" /> 
</selector> 

當按下列表項,它適用的梯度。但是,如果用戶啓動了多點觸控事件(例如通過在列表視圖之外的某處放置額外的手指),那麼列表項可能仍處於按下狀態,直到列表視圖接收到另一個觸摸事件。

有沒有辦法解決這個問題?

回答

1

這一定程度上取決於您希望完成什麼...

如果您正在尋找顯示第三背景類型,當用戶有兩個手指下降,還有就是你可以直接引用到沒有繪製狀態完成。您將不得不合作在觸摸模式下不常用的現有狀態之一(如選定狀態),並在列表項的對象上實現自定義觸摸處理程序以設置該狀態。例如,在每個列表項的視圖中執行onTouchEvent()(或者如果您沒有自定義類,則添加onTouchListener()),查找ACTION_POINTER_DOWN事件以告訴您第二個手指落下,並在視圖上調用setSelected()以觸發您可以在<selector>中設置android:state_selected

如果您只是希望在這種情況下清除狀態,則可以在檢測到多個手指時取消觸摸事件。在這種情況下,您正在查看定製ListView.onInterceptTouchEvent()方法以查找ACTION_PONTER_DOWN事件並返回true。這將教導ListView用第二根手指從其子項目中竊取返回,這將取消列表項目的按下狀態。請確保調用回通過對super在這種情況下,這樣你就不會打破現有的所有邏輯ListView用來滾動等

謹防例,其中已有AbsListView實現可以讓你的方式在這裏。例如,onIntercepTouchEvent()的當前實施方式尋找ACTION_POINTER_UP以便將主觸摸手指從第一個切換到第二個。如果您沒有意識到這種行爲,可能會在您的自定義中造成奇怪的工件。

HTH。