ViewPager的弹性缩回效果
android 实现划屏效果控件有:ViewFlipper,用过的同学们都知道,这个控件有点死板,只能等待你手势执行完毕后才执行滑动效果,用起来很不爽,不过ViewPager可以很容易实现这个效果.但是有个缺陷,也就是在首页时候向左拽,在最后一页向右拽,这两者是没有效果的,而iphone的效果是你拖拽出现一片空的page会自动缩回首页或尾页,这个看起来很爽,不过android强大之处你可以自己实现,我是菜鸟,说的都是个人观点,获取有很多很多的bug吧,若有不足之处请您多多指出,我将感激不尽.
首先要实现ViewPager效果,必须要导入一个jar包“android-support-v4.jar”这个jar包可以在android sdk中找到路径为”E:\android-sdk-windows\extras\android\support\v4“
关于细节上的问题,自己可以网上搜搜.在这里我要讲两点”怎么实现禁止滑向下一页“
其实实现方法很简单,一说你也就知道了.”多创建两个屏,用于放在第一屏和最后一屏“嘿嘿,知道了吧,我其实也没做什么,就是稍微修改了一下,具体代码如下:
主要是这个回调 OnPageChangeListener接口,当页数改变回调用,也就是当你左右滑动的时候会执行,还有一个重要的方法:pager.setCurrentItem(arg0 - 1);你要显示哪一页的时候也会调用调用.
源码已经优化:
package com.jj.viewpager;import java.util.ArrayList;import android.app.ActivityGroup;import android.content.Intent;import android.os.Bundle;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.View;import android.view.ViewGroup;import android.view.ViewGroup.LayoutParams;import android.widget.ImageView;import android.widget.LinearLayout;public class MainActivity extends ActivityGroup {private ViewPager pager;private ArrayList<View> pageViews=new ArrayList<View>();private LinearLayout layout;private int curPosition=1;//当前显示页,从1开始private ArrayList<ImageView> imageViews;private int points;//多少个点@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);initViews();}void initViews() {View view00 = getLocalActivityManager().startActivity("activity00",new Intent(this, NullActivity.class)).getDecorView();View view01 = getLocalActivityManager().startActivity("activity01",new Intent(this, MainActivity1.class)).getDecorView();View view02 = getLocalActivityManager().startActivity("activity02",new Intent(this, MainActivity2.class)).getDecorView();View view03 = getLocalActivityManager().startActivity("activity03",new Intent(this, MainActivity3.class)).getDecorView();View view04 = getLocalActivityManager().startActivity("activity00",new Intent(this, NullActivity.class)).getDecorView();pageViews.add(view00);pageViews.add(view01);pageViews.add(view02);pageViews.add(view03);pageViews.add(view04);pager = (ViewPager) findViewById(R.id.vp_contains);pager.setAdapter(new PagerViewAdapter());pager.setCurrentItem(curPosition);pager.setOnPageChangeListener(new OnPageChangeListener() {@Overridepublic void onPageSelected(int position) {if (position == 0) {pager.setCurrentItem(position + 1);} else if(position == pageViews.size() - 1){pager.setCurrentItem(position - 1);}updateViews(pager.getCurrentItem());}@Overridepublic void onPageScrolled(int arg0, float arg1, int arg2) {}@Overridepublic void onPageScrollStateChanged(int arg0) {}});imageViews = new ArrayList<ImageView>();layout = (LinearLayout) findViewById(R.id.layout);points=pageViews.size()-2;for (int i = 0; i < points; i++) {ImageView imageView = new ImageView(this);imageView.setLayoutParams(new LayoutParams(5, 5));LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));params.leftMargin = 20;params.rightMargin = 20;layout.addView(imageView, params);imageViews.add(imageView);imageView.setBackgroundResource(i == pager.getCurrentItem()-1?R.drawable.d2:R.drawable.d1);}}public void updateViews(int index) {for (int i = 0; i < points; i++) {imageViews.get(i).setBackgroundResource(i==index-1?R.drawable.d2:R.drawable.d1);}}class PagerViewAdapter extends PagerAdapter {@Overridepublic int getCount() {return pageViews.size();}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic int getItemPosition(Object object) {// TODO Auto-generated method stubreturn super.getItemPosition(object);}@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {// TODO Auto-generated method stub((ViewPager) arg0).removeView(pageViews.get(arg1));}@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(pageViews.get(arg1));return pageViews.get(arg1);}}}