目标是实现一个 Gallery,其适配器返回 ListView(换句话说,嵌入水平滚动 Gallery 中的垂直滚动 ListView)。经过一些工作后它就可以工作了,但是当尝试水平滚动时,ListView 看起来非常不稳定,就像居中时有一些粘性。我还没有在图库中嵌入任何其他类型的视图时观察到这种行为。
这是我尝试过的:
最初,我发现 ListView 压缩了触摸事件,因此 Gallery 上的手势侦听器永远不会被触发。
所以在Activity的onCreate()方法中,我创建了一个GestureDetector:
galleryGestureDetector = new GestureDetector(this, gallery);
然后,在 Gallery 适配器的 getView() 方法内,在 ListView 已膨胀并配置之后,我有一些如下代码:
listView.setOnTouchListener(new OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
galleryGestureDetector.onTouchEvent(event);
return true;
}
});
在这种情况下,我什至采取了从 OnTouchListener 返回 true 的极端步骤,以确保 listView 的 onTouchEvent() 方法永远不会被实际调用。同样的紧张行为也会发生。因此,我认为我可以排除两个视图之间竞争的 onTouchEvent() 实现。
我也尝试滥用 TouchDelegate 概念,通过扩展 Gallery 的触摸矩形以包含 ListView,然后强制 ListView 委托给它,但这也是徒劳的。
我会举手说目前这是不可能的,但 DroidX 附带的社交网络应用程序以某种方式实现了它!