0

我正在编写一个 Android 应用程序,我在 Gallery 中使用 ListViews。ListViews 代表聊天窗口。我真的希望能够在图库中的聊天窗口之间滑动,同时还能够在 ListView 中滚动或单击单个消息。在搜索时,我在 Stackoverflow 上找到了一个人,他很友善地为这个问题提供了解决方案: Android - Gallery 中的 ListView 使滚动不平滑

他的 BetterGallery 几乎对我有用。单击列表项有效,滚动列表视图有效。我目前有两个问题需要解决这个实现:

1)在图库中滑动时,移动不流畅,并且不确定最终会显示哪个列表视图。

2) 您可以在同一手指运动中同时滑动和滚动,例如沿对角线移动手指。

作为第 2 点的注释:我正在寻找的行为类似于您可以在 GTalk 中找到的聊天窗口。在 GTalk 中,您既可以在聊天中滚动,也可以在不同聊天之间滑动,一次完成。这意味着如果您开始滚动,从一侧移动到另一侧的手指将不会滑动。同样,开始滑动将阻止滚动,直到您松开手指并开始新手势。

有没有人实现了类似于它在 GTalk 中的工作方式?

最好的祝愿!

4

1 回答 1

1

我有同样的问题。解决方案并不简单。

    • 将列表视图设置为在触摸模式下不可聚焦。

    listView.setFocusableInTouchMode(false);

    • 如果您需要焦点,请从 onItemSelected 侦听器中调用它。


2. - 使用 OnInterceptTouchEvent 从您的孩子那里获取触摸事件。并在 onScroll 和 onTouchEvent 中进行一些修改

    
    OnItemSelectedListener mOnItemSelected = new OnItemSelectedListener()
            {
@Override public void onItemSelected(AdapterView parent, View view, int position, long id) { view.requestFocusFromTouch(); } @Override public void onNothingSelected(AdapterView parent) {
} };

    
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        onTouchEvent(ev);
        return scrollingHorizontally;
    }

@Override public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) { if(Math.abs(distanceX)>Math.abs(distanceY) || scrollingHorizontally == true){ scrollingHorizontally = true; super.onScroll(e1, e2, distanceX, distanceY); } return scrollingHorizontally; }

@Override public boolean onTouchEvent(MotionEvent event) { switch(event.getAction()) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: scrollingHorizontally = false; break; default: break; } super.onTouchEvent(event); return scrollingHorizontally; }
于 2011-06-28T12:56:38.890 回答