引用:http://www.apkbus.com/android-18384-1-1.html
在为ViewFlipper视图切换增加动画和Android中实现视图随手势移动中实现了视图随手势切换,现在Android中Compatibility Package提供了ViewPager可以更简便的实现视图切换,实现的效果如下:
<ignore_js_op>
效果和ViewGroup一样,但是实现过程更简单.新版的Android Market和Google+都是用了ViewPager.
<ignore_js_op>
说一下实现过程:
工程目录如下:
<ignore_js_op>
MyPagerActivity的onCreate方法如下:
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- initPageContent();
- awesomeAdapter = new MyPagerAdapter();
- awesomePager = (ViewPager) findViewById(R.id.awesomepager);
- awesomePager.setAdapter(awesomeAdapter);
- }
复制代码
其中main.xml布局文件引入了ViewPager:
- <linearlayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- android:background="#a4c639">
- <android.support.v4.view.viewpager
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:id="@+id/awesomepager"/>
复制代码
MyPagerAdapter继承了PagerAdapter:
- private class MyPagerAdapter extends PagerAdapter{
- @Override
- public int getCount() {
- return imageS.length;
- }
- /**
- * Create the page for the given position. The adapter is responsible
- * for adding the view to the container given here, although it only
- * must ensure this is done by the time it returns from
- * {@link #finishUpdate()}.
- *
- * @param container The containing View in which the page will be shown.
- * @param position The page position to be instantiated.
- * @return Returns an Object representing the new page. This does not
- * need to be a View, but can be some other container of the page.
- */
- @Override
- public Object instantiateItem(View collection, int position) {
- View view = getLayoutInflater().inflate(R.layout.page,null);
- ImageView imageView =(ImageView) view.findViewById(R.id.imageId);
- imageView.setImageDrawable(imageS[position]);
- ((ViewPager) collection).addView(view,0);
- return view;
- }
- /**
- * Remove a page for the given position. The adapter is responsible
- * for removing the view from its container, although it only must ensure
- * this is done by the time it returns from {@link #finishUpdate()}.
- *
- * @param container The containing View from which the page will be removed.
- * @param position The page position to be removed.
- * @param object The same object that was returned by
- * {@link #instantiateItem(View, int)}.
- */
- @Override
- public void destroyItem(View collection, int position, Object view) {
- ((ViewPager) collection).removeView((View) view);
- }
- @Override
- public boolean isViewFromObject(View view, Object object) {
- return view==((View)object);
- }
- /**
- * Called when the a change in the shown pages has been completed. At this
- * point you must ensure that all of the pages have actually been added or
- * removed from the container as appropriate.
- * @param container The containing View which is displaying this adapter’s
- * page views.
- */
- @Override
- public void finishUpdate(View arg0) {}
- @Override
- public void restoreState(Parcelable arg0, ClassLoader arg1) {}
- @Override
- public Parcelable saveState() {
- return null;
- }
- @Override
- public void startUpdate(View arg0) {}
- }
复制代码
其中红色代码部分负责加载Layout和想layout中填充View.这样就实现了视图的随手势切换.源代码见: <ignore_js_op> android-viewpager0.1.rar (375.4 KB, 下载次数: 813)
|
|