如Google所记录,Gallery类在API级别16中已弃用。不再支持此小部件。其他水平滚动小部件包括支持库中的HorizontalScrollView和ViewPager。因此,我使用ViewPager作为Gallery类的替代方法。
我的目标是最终实现 带有文本描述 的 无限滚动图像ViewPager 。我使用以下代码实现了具有描述每个图像的文本的图像ViewPager,但是 如何将无限滚动应用于ViewPager?
我以前没有使用过ViewPager,因此,请尽可能提供详细的代码。
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical"> <android.support.v4.view.ViewPager android:id="@+id/myimagepager" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
custom_pager.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" android:gravity="center_horizontal"> <ImageView android:id="@+id/myimage" android:layout_width="match_parent" android:layout_height="0dp" android:layout_margin="5dp" android:layout_weight="2" /> <TextView android:id="@+id/image_text" android:layout_width="fill_parent" android:layout_height="0dp" android:layout_weight="1"/> </LinearLayout>
ImagePager:
public class ImagePager extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ImagePagerAdapter adapter = new ImagePagerAdapter(this, imageArra, stringArray ); ViewPager myPager = (ViewPager) findViewById(R.id.myimagepager); myPager.setAdapter(adapter); myPager.setCurrentItem(0); } private int imageArra[] = { R.drawable.a, R.drawable.b,R.drawable.c, R.drawable.d,R.drawable.e,R.drawable.f, R.drawable.g, R.drawable.h, R.drawable.i}; private String[] stringArray = new String[] { "Image a", "Image b","Image c" "Image d","Image e","Image f", "Image g","Image h","Image i"}; }
ImagePagerAdapter:
public class ImagePagerAdapter extends PagerAdapter { Activity activity; int imageArray[]; String[] stringArray; public ImagePagerAdapter(Activity act, int[] imgArra, String[] stringArra) { imageArray = imgArra; activity = act; stringArray = stringArra; } public int getCount() { return imageArray.length; } public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater)collection.getContext ().getSystemService(Context.LAYOUT_INFLATER_SERVICE); View layout = inflater.inflate(R.layout.custom_pager, null); ImageView im=(ImageView) layout.findViewById(R.id.myimage); im.setImageResource(imageArray[position]); TextView txt=(TextView) layout.findViewById(R.id.image_text); txt.setText(stringArray[position]); ((ViewPager) collection).addView(layout, 0); return layout; } @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; } }
我遇到了同样的问题,但是我找到了解决的办法- 代码可以在github上找到。
如果将类InfiniteViewPager和InfinitePagerAdapter复制到项目中,则可以进行一些小的更改来实现无限(环绕)滚动。
在您的“活动”中,将您的PagerAdapter包裹为InfinitePagerAdapter:
InfinitePagerAdapter
PagerAdapter adapter = new InfinitePagerAdapter(new ImagePagerAdapter(this, imageArra, stringArray));
将活动XML中的ViewPager更改为InfiniteViewPager:
InfiniteViewPager
<com.antonyt.infiniteviewpager.InfiniteViewPager android:id="@+id/myimagepager" android:layout_width="match_parent" android:layout_height="match_parent" />
您可以将类重命名为所需的任何类。该代码仅在至少有三页的情况下才有效(示例代码中有九页,因此可以正常工作)。