Android: ListViews внутри галереи - как получить прокрутку, щелчок и пролистывание, как в GTalk? - PullRequest
0 голосов
/ 13 апреля 2011

Я пишу приложение для Android и использую ListViews внутри галереи. ListViews представляют окна чата. Мне бы очень хотелось иметь возможность пролистывать окна чата в Галерее, а также прокручивать в ListView или нажимать отдельные сообщения. Во время поиска я нашел здесь в Stackoverflow парня, который был достаточно любезен, чтобы предложить решение этой проблемы: Android - ListView внутри галереи делает прокрутку не плавной

Его BetterGallery почти работает для меня. Щелчок по элементу списка работает и прокрутка списка работает. В настоящее время у меня есть две проблемы с этой реализацией:

1) При перелистывании в галерее движение не является плавным, и не всегда ясно, какой просмотр списка будет отображаться.

2) Вы можете одновременно проводить и прокручивать одним и тем же движением пальца, например, двигая пальцем по диагонали.

Как примечание к пункту 2: Я ищу поведение, похожее на окна чата, которые вы можете найти в GTalk. В GTalk вы можете выполнять прокрутку в чате или перемещаться между различными чатами одним движением. Это означает, что если вы начнете прокручивать, перемещение пальцем из стороны в сторону не будет смахивать. Точно так же запуск свайпа будет блокировать прокрутку, пока вы не отпустите палец и не начнете новый жест.

Кто-нибудь достиг чего-то похожего на то, как это работает в GTalk?

С наилучшими пожеланиями!

1 Ответ

1 голос
/ 28 июня 2011

У меня была такая же проблема. И решение не просто.

    • Установите вид списка не фокусируемым в сенсорном режиме.

    listView.setFocusableInTouchMode(false);

    • Если вам нужен фокус, вызовите его из прослушивателя onItemSelected.


2. - Используйте OnInterceptTouchEvent, чтобы получить Touch Events от вашего ребенка. И внесите некоторые изменения в onScroll и onTouchEvent

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

<p><pre>    <code>
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        onTouchEvent(ev);
        return scrollingHorizontally;
    }</p>

<p>    </p>

@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) { switch (event.getAction ()) { case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: scrollingHorizontally = false; перерыв; дефолт: перерыв; } super.onTouchEvent (событие); вернуть прокрутку по горизонтали; }
...