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)
如何让我的画廊视图循环?我可以无限地从左到右进行,但是当我从右向左拖动时,它显示了终点.
ree*_*ece 17
在getView中:
if(position>21){
position=0;
}
Run Code Online (Sandbox Code Playgroud)
这应该被删除,因为它应该由checkPosition函数处理.
在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)
归档时间: |
|
查看次数: |
10490 次 |
最近记录: |