2013-12-16 88 views
3

viewpager vertically and even looping中顯示圖像,如:A> B> C> D> A並點擊特定圖像需要打開瀏覽器中的相關網站。圓形垂直視圖打印機

然而,我實現縱向看尋呼機,與this tutorial的幫助和循環也在努力,但圖像的onClick它沒有返回正確的位置,因爲它的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

把這段代碼裏面onpageselected method:

if (position < ImagepathList.size()) { 
        newPos = position; 
       } else { 
       for (int j = 0; j < ImagepathList.size(); j++) { 
        if (position % ImagepathList.size() == j) { 
         newPos = j; 
        } 
       } 

你會得到正確的位置。

+0

謝謝,它的工作原理! – RobinHood

+1

這可行,但是酒吧遠不是理想的解決方案。整個'ViewPager'應該重做,只能保持數量+2項!如果用戶滾動了很多,你的應用會崩潰,因爲ViewPager中有很多項目。 – Leandros

1

垂直滾動?也許ListView是更好的選擇。

嘗試this,我認爲它可以幫助。

+0

它對我沒有幫助。 – RobinHood

0

這個解決方案聽起來很簡單,但確實需要一些工作來實現。

您目前一直在增加ViewPager中的項目數,這在某種程度上有用,但不是一個好的解決方案,它是一種破解。
當您即將到達結尾時,您必須將位置設置回開始位置。爲此,您需要在開始和結束時使用一個項目的緩衝區。
ViewPager.OnPageChangeListeneronPageScrollStateChanged(int state)非常有用(並且是必需的)。

現在您可以輕鬆地獲得正確的位置,因爲您不會增加計數。

+0

以及當用戶向上滑動時會發生什麼。 – RobinHood

+0

相同。你必須實現它,以兩種方式工作。 – Leandros