Как реализовать бесконечную галерею в Android?

Я использую расположение галереи в своем приложении. Это работает, когда пользователь перемещает изображения в галерею слева направо (это бесконечно, который означает, что элементы повторяются снова). Но когда пользователь перемещается справа налево и достигает первого элемента, он не делает. После того, как затем никакие элементы не прибывают. Но я хочу повторить элементы с этой стороны также. Можно ли дать мне некоторые предложения?

 Gallery g = (Gallery) findViewById(R.id.gallery);
        g.setAdapter(new ImageAdapter(this));
        g.setFocusable(true);
        g.setSelection((int)(Integer.MAX_VALUE / 2) - (Integer.MAX_VALUE / 2)% mImageIds.length);        
        g.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
            {
                try {
                    imageid=position;
                    ((ImageView)findViewById(R.id.ImageViewlarge)).setImageResource(mImageIds[position]);
                    ((TextView)findViewById(R.id.TextViewImageName)).setText(imgNames[position]);
                     mp = MediaPlayer.create(SeaSpell.this,audioTrack[position]);

                        } catch (Exception e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }

                }
            });


        }

Screenshot Frontgallery

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

9
задан Lennart 11 January 2013 в 13:38
поделиться

2 ответа

В getView:

if(position>21){
    position=0;
}

это следует убрать, так как это должно обрабатываться функцией checkPosition.

В checkPosition:

Для оператора модуля (%), заданного a % b, если 0 <= a < b, то результатом будет a. Для b <= a < 2*b результатом будет a-b, поэтому если b == a, то результатом будет 0. Это продолжается для любого целого положительного числа, поэтому проверка должна быть такой:

if (position > 0)
    position = position % mImageIds.length;

Теперь, чего вам не хватает, так это обработки случая, когда position < 0.

a    a%3    a    a%3    f(a)
0    0      0    0      0
1    1     -1   -1      2
2    2     -2   -2      1
3    0     -3    0      0
4    1     -4   -1      2
5    2     -5   -2      1
6    0     -6    0      0

Что мы хотим в этом случае, так это чтобы он обернулся назад к концу списка - f(a) в таблице выше.

Как видно из таблицы выше, если a отрицательно, то -b < a <= 0. Также, если мы сделаем f(a) = (a % b) + b, то получим желаемый результат.

Это означает, что логика в checkPosition становится:

position = position % mImageIds.length;
if (position < 0)
    position = position + mImageIds.length;

которая должна работать для всех значений position независимо от значения mImageIds.length.

17
ответ дан 4 December 2019 в 06:55
поделиться

Если кто-то захочет сделать так, чтобы он также пошел в обратном направлении, вы можете реализовать это. Все, что он на самом деле делает, это запускает галерею посередине.

GalleryName.setSelection((int)( Integer.MAX_VALUE / 2 ) - ( Integer.MAX_VALUE / 2 ) % mImageIds.length);
12
ответ дан 4 December 2019 в 06:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: