Галерея прокручивает изображение, скачет после перемещения на 3/4 экрана - PullRequest
3 голосов
/ 17 августа 2011

Я делаю приложение с галереей с показом нескольких изображений, когда я прокручиваю изображения, они перемещаются и прыгают после определенной точки. Как мне сделать их гладкими? Любой пример кода будет очень полезен.

Ответы [ 3 ]

4 голосов
/ 10 февраля 2012

Мне удалось решить эту проблему, переопределив метод onLayout () в родительском объекте Gallery, а затем проигнорировав все вызовы, в которых измененный флаг был неверным.

public class MyGallery extends Gallery {

    public MyGallery(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        if (changed) {
            super.onLayout(changed, l, t, r, b);
        }
    }
}
4 голосов
/ 18 августа 2011

У меня была похожая проблема.Похоже, это может быть вызвано изменениями в макете, например, если вы измените текст в textview, который имеет ширину wrap_content.В этом случае изменение макета и, вероятно, вынуждает галерею обновляться, и она привязывается прямо к текущему элементу.

Я смог исправить это, поиграв с макетом, установив фиксированные размеры, где мог, и т. Д., Но я не знаюо постоянном и надежном решении

РЕДАКТИРОВАТЬ: также я нашел этот взлом, если выше, у вас не работает

http://www.unwesen.de/2011/04/17/android-jittery-scrolling-gallery/

3 голосов
/ 22 февраля 2012

Я обнаружил, что вышеприведенная Галерея расширяет возможности решения, чтобы работать довольно хорошо. Однако это все еще вызывало некоторое дрожание. Простым переопределением метода onLayout и поиском количества просмотров на экране я получил «Гладкий как шелк» вид галереи. Обратите внимание, что я использую это для полноэкранного слайд-шоу.

public class SmoothGallery extends Gallery {
    public SmoothGallery(Context context, AttributeSet attrs) {
        super(context, attrs);
    }


    @Override
    protected void onLayout(boolean changed, int l, int t, int r, int b) {
        int viewsOnScreen = getLastVisiblePosition() - getFirstVisiblePosition();
        if(viewsOnScreen <= 0)
            super.onLayout(changed, l, t, r, b);
    }
}
...