2012-07-24 64 views
3

什麼我的代碼呢:滑動操作的圖像(不是佈局)與viewpager

這裏是我的代碼這對於viewpager該XML佈局之間揮筆(名爲left.xml,right.xml和center.xml)。

我想要它做的

我想圖像(存儲在繪製文件夾)之間的刷卡什麼。當我用R.drawable.image替換R.layout.xml時,我的應用崩潰了。有人能幫我弄清楚嗎?

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    MyPagerAdapter adapter = new MyPagerAdapter(); 
    ViewPager myPager = (ViewPager) findViewById(R.id.myfivepanelpager); 
    myPager.setAdapter(adapter); 
    myPager.setCurrentItem(0); 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.activity_main, menu); 
    return true; 
} 

class MyPagerAdapter extends PagerAdapter { 

    public int getCount() { 
     return 3; 
    } 

    public Object instantiateItem(View collection, int position) { 

     LayoutInflater inflater = (LayoutInflater) collection.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     int resId = 0; 
     switch (position) { 
     case 0: 
      resId = R.layout.left; 
      break; 
     case 1: 
      resId = R.layout.center; 
      break; 
     case 2: 
      resId = R.layout.right; 
      break; 
     } 

     View view = inflater.inflate(resId, null); 

     ((ViewPager) collection).addView(view, 0); 

     return view; 
    } 

    @Override 
    public void destroyItem(View arg0, int arg1, Object arg2) { 
     ((ViewPager) arg0).removeView((View) arg2); 

    } 

    @Override 
    public boolean isViewFromObject(View arg0, Object arg1) { 
     return arg0 == ((View) arg1); 

    } 

    @Override 
    public Parcelable saveState() { 
     return null; 
    } 
} 

}

回答

5

如果您使用的是相同的實現,只是添加R.drawable.XXX代替R.layout.YYY那麼問題就在那裏。您正在使用LayoutInflater來膨脹ImageView s,佈局充氣器,因爲它自己說它膨脹整個佈局在一個單一的View

而不是嘗試通過代碼創建ImageView對象,然後在return返回新創建的ImageView。一些示例代碼將是:

public Object instantiateItem(View collection, int position) { 

    ImageView img = new ImageView(context); //this is a variable that stores the context of the activity 
    //set properties for the image like width, height, gravity etc... 

    int resId = 0; 
    switch (position) { 
     case 0: 
      resId = R.drawable.img1; 
      break; 
     case 1: 
      resId = R.drawable.img2; 
      break; 
     case 2: 
      resId = R.drawable.img3; 
      break; 
    } 

    img.setImageResource(resId); //setting the source of the image 
    return img; 
} 

如果你只是用你應該考慮在包含ViewPager,而不是動態創建ViewPager的XML將它們添加圖片或網頁的具體金額。

+0

謝謝,但它仍然無法正常工作,我嘗試了xml版本的imageview以及動態圖像視圖。沒有我有很多的圖像顯示,所以我不能爲此寫一個XML文件。 – 2012-07-24 23:37:12

+0

我忘了1行代碼:'((ViewPager)collection).addView(img,0);' – 10s 2012-07-24 23:46:11

+0

我只是想說,歡呼! – 2012-07-24 23:47:49

0

我認爲一個選擇是將每個圖像插入到它自己的帶有ImageView的佈局中,然後膨脹圖像所在的佈局而不是圖像本身。