Я использую расположение галереи в своем приложении. Это работает, когда пользователь перемещает изображения в галерею слева направо (это бесконечно, который означает, что элементы повторяются снова). Но когда пользователь перемещается справа налево и достигает первого элемента, он не делает. После того, как затем никакие элементы не прибывают. Но я хочу повторить элементы с этой стороны также. Можно ли дать мне некоторые предложения?
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();
}
}
});
}
Как я могу заставить свою галерею просмотреть проспект? Я могу сделать это слева направо бесконечно, но когда я перетаскиваю справа налево, это показывает конечную точку.
В 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
.
Если кто-то захочет сделать так, чтобы он также пошел в обратном направлении, вы можете реализовать это. Все, что он на самом деле делает, это запускает галерею посередине.
GalleryName.setSelection((int)( Integer.MAX_VALUE / 2 ) - ( Integer.MAX_VALUE / 2 ) % mImageIds.length);