我在我的应用程序中使用画廊布局。当用户将图库中的图片从左向右移动时它会起作用(它是无限的,这意味着元素会再次重复)。但是当用户从右向左移动并到达第一个元素时,它没有。之后没有元素来了。但我也想重复这一方面的内容。你能给我一些建议吗?
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();
}
}
});
}
如何使我的画廊 View 循环显示?我可以从左到右无限地进行,但是当我从右到左拖动时,它会显示终点。
最佳答案
在getView中:
if(position>21){
position=0;
}
这应该被删除,因为它应该由 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
的值无关.
关于android - 如何在Android中实现无尽的画廊?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3393918/