如何在Android中实现无尽的画廊?

Nar*_*mha 9 android gallery adapter

我在我的应用程序中使用了库布局.当用户从左到右移动图库中的图片时它正在工作(它是无限的,意味着元素再次重复).但是当用户从右向左移动并到达第一个元素时,它不会.之后就没有元素了.但是我也要重复这一方面的要素.你能给我一些建议吗?

 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();
                            }

                }
            });


        }
Run Code Online (Sandbox Code Playgroud)

截图Frontgallery

如何让我的画廊视图循环?我可以无限地从左到右进行,但是当我从右向左拖动时,它显示了终点.

ree*_*ece 17

在getView中:

if(position>21){
    position=0;
}
Run Code Online (Sandbox Code Playgroud)

这应该被删除,因为它应该由ch​​eckPosition函数处理.

在checkPosition中:

对于模运算符(%),a % b如果0 <= a < b那么结果将给出a.对于b <= a < 2*b那么结果将是a-b,如果b == a,那么结果是0.对于任何正整数,这都会继续,因此检查应该是:

if (position > 0)
    position = position % mImageIds.length;
Run Code Online (Sandbox Code Playgroud)

现在,你在这里缺少的是处理案例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
Run Code Online (Sandbox Code Playgroud)

在这种情况下我们想要的是它回绕到列表的末尾 - f(a)在上表中.

从上表中可以看出,如果a是负面那么-b < a <= 0.此外,如果我们让f(a) = (a % b) + b我们得到我们想要的结果.

这意味着checkPosition中的逻辑变为:

position = position % mImageIds.length;
if (position < 0)
    position = position + mImageIds.length;
Run Code Online (Sandbox Code Playgroud)

这应该适用于所有价值,position而不论其价值mImageIds.length.


小智 12

如果有人想让它也倒退,你可以实现这一点.所有这一切真的是在中间开始画廊.

GalleryName.setSelection((int)( Integer.MAX_VALUE / 2 ) - ( Integer.MAX_VALUE / 2 ) % mImageIds.length);
Run Code Online (Sandbox Code Playgroud)