圆形垂直viewpager

时间:2013-12-16 09:52:14

标签: android android-viewpager

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

            }
        });

3 个答案:

答案 0 :(得分:1)

垂直滚动?也许ListView是一个更好的选择。

试试this,我认为这可能会有所帮助。

答案 1 :(得分:0)

这个解决方案听起来很简单,但确实需要一些工作才能实现。

您目前总是增加ViewPager中的项目数,这在某种程度上有效,但不是一个好的解决方案,这是一个黑客。
当您即将到达终点时,您必须将位置设置回起始位置。为此,您需要在开始和结束时使用一个项目的缓冲区。
ViewPager.OnPageChangeListeneronPageScrollStateChanged(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;
                    }
                }

你会得到正确的位置。