在viewpager vertically and even looping
中显示图片,例如: A> B> C> D> A ,点击特定图片需要在浏览器中打开相关网站。
然而我在this tutorial的帮助下实现了垂直视图寻呼机,并且循环也工作但是onClick of image它没有返回正确的位置因为 getCount()我每次都会增加在instantiateItem中。 If I wont do so then it stop looping.
当我点击特定图像时,需要获取正确的位置,查看逻辑并建议我。
适配器的
public class FullScreenImageAdapter extends com.xxxxxx.util.PagerAdapter {
private Activity _activity;
private ArrayList<String> _imagePaths;
private LayoutInflater inflater;
private int mFakeCount = 0,newPosition;
// constructor
public FullScreenImageAdapter(Activity activity, ArrayList<String> imagePaths) {
this._activity = activity;
this._imagePaths = imagePaths;
mFakeCount = _imagePaths.size()+1;
}
@Override
public int getCount() {
return this.mFakeCount;
// return this._imagePaths.size();
}
public int getNewPosition(){
return newPosition;
}
@Override
public boolean isViewFromObject(View view, Object object) {
return view == ((RelativeLayout) object);
}
// image lenght =6
//
@Override
public Object instantiateItem(ViewGroup container, int position) {
ImageView imgDisplay;
if (position >= _imagePaths.size()-1) {
newPosition = position%_imagePaths.size();
Log.d("####", "new position="+newPosition);
position = newPosition;
mFakeCount++;
}
Log.d("####", "default position="+position);
inflater = (LayoutInflater) _activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View viewLayout = inflater.inflate(R.layout.layout_fullscreen_image, container,false);
imgDisplay = (ImageView) viewLayout.findViewById(R.id.imgDisplay);
BitmapFactory.Options options = new BitmapFactory.Options();
options.inPreferredConfig = Bitmap.Config.ARGB_8888;
Bitmap bitmap = BitmapFactory.decodeFile(_imagePaths.get(position));
imgDisplay.setImageBitmap(bitmap);
((VerticalViewPager) container).addView(viewLayout);
viewLayout.setTag(_imagePaths.get(position));
return viewLayout;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
((VerticalViewPager) container).removeView((RelativeLayout) object);
}
}
OnPageChangeListener
_viewPager.setOnPageChangeListener(new OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
browser_url = LockScreen.db.getURL("browser_url",_viewPager.getCurrentItem() + 1); //_viewPager.getCurrentItem() return wrong position.
Log.i("browser_url dynamic", browser_url);
}
@Override
public void onPageScrolled(int position, float positionOffset,
int positionOffsetPixels)
{
}
@Override
public void onPageScrollStateChanged(int position) {
Log.v("onPageScrollStateChanged", String.valueOf(position));
}
});
答案 0 :(得分:1)
垂直滚动?也许ListView是一个更好的选择。
试试this,我认为这可能会有所帮助。
答案 1 :(得分:0)
这个解决方案听起来很简单,但确实需要一些工作才能实现。
您目前总是增加ViewPager
中的项目数,这在某种程度上有效,但不是一个好的解决方案,这是一个黑客。
当您即将到达终点时,您必须将位置设置回起始位置。为此,您需要在开始和结束时使用一个项目的缓冲区。
ViewPager.OnPageChangeListener
和onPageScrollStateChanged(int state)
非常有用(也是必需的)。
现在您可以轻松获得正确的位置,因为您不会增加计数。
答案 2 :(得分:0)
将此代码放在onpageselected method:
if (position < ImagepathList.size()) {
newPos = position;
} else {
for (int j = 0; j < ImagepathList.size(); j++) {
if (position % ImagepathList.size() == j) {
newPos = j;
}
}
你会得到正确的位置。