OnPageChangeListener的简单运用

来源:互联网 发布:海量数据是什么 编辑:程序博客网 时间:2024/06/05 10:26

参考自博客:http://www.cnblogs.com/xinye/archive/2013/06/09/3128209.html

目的:

     进一步简单熟悉OnPageChangeListener, ViewPager浏览图片时候切换页面的时候有个缩放效果。

     这里主要用了setPadding(...) 同理可以增加setAlpha(...)透明度改变的效果。

代码一: activity_main.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="${relativePackage}.${activityClass}" >  <android.support.v4.view.ViewPager      android:layout_width="match_parent"      android:layout_height="match_parent"      android:id="@+id/viewPager"  /></LinearLayout>

代码二: MainActivity.java

public class MainActivity extends Activity {   private ViewPager mViewPager;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mViewPager=(ViewPager)findViewById(R.id.viewPager);Integer[] drawableArray=new Integer[]{R.drawable.dongzhi,R.drawable.hanlu,R.drawable.liqiu,R.drawable.xiaohan};ArrayList<ImageView> list=new ArrayList<ImageView>();for(int i=0;i<drawableArray.length;i++){ImageView imgView=new ImageView(this);imgView.setImageResource(drawableArray[i]);list.add(imgView);}mViewPager.setAdapter(new mViewPagerAdapter(list));mPageChangeListener listener=new mPageChangeListener(mViewPager,list);mViewPager.setOnPageChangeListener(listener);}        // Part2-->>Adapter适配器class mViewPagerAdapter extends PagerAdapter{private ArrayList<ImageView> viewList;public mViewPagerAdapter(ArrayList<ImageView> viewList){this.viewList=viewList;}@Overridepublic int getCount() {return viewList.size();}@Overridepublic boolean isViewFromObject(View view, Object obj) {return view==obj;}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeViewInLayout((View) object);}@Overridepublic Object instantiateItem(ViewGroup container, int position) {ImageView imgView=viewList.get(position);container.addView(imgView);return  imgView;}}          //Part3 - ->>OnPageChangeListener监听类  class mPageChangeListener implements OnPageChangeListener{  int currentPageNo=0;  int offset=0;  int downX=0;  private ArrayList<ImageView> viewList;  private ViewPager viewPager;        public mPageChangeListener(ViewPager viewPager,ArrayList<ImageView>list){        this.viewPager=viewPager;        this.viewList=list;        this.viewPager.setOnTouchListener(new OnTouchListener(){@Override      //本来想根据OnTouchListener对第0页和最后一页做处理的,结果。。。没弄出来,这里没有用到这个监听类public boolean onTouch(View v, MotionEvent event) {   switch(event.getAction()){   case MotionEvent.ACTION_DOWN: downX=(int) event.getX(); break;   case MotionEvent.ACTION_MOVE:   offset=(int)(event.getX()-downX); break;   case MotionEvent.ACTION_UP:   offset=0; downX=0; break;   }return false;//false则go on,true则不会继续响应ViewPager本身的触摸事件机制;}        });        }@Overridepublic void onPageScrollStateChanged(int state) {if(state==ViewPager.SCROLL_STATE_IDLE){for(int i=0;i<viewList.size()-1;i++){ viewList.get(i).setPadding(0, 0, 0, 0);}}Log.v("zz","zz-->>State="+state);}@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {Log.v("zz","zz-->>position="+position+"--Offset="+positionOffset+"--offsetPixels="+positionOffsetPixels);            int paddingNum=50;            int paddingNext=(int)(paddingNum*(1-positionOffset));            int paddingCurr=(int)(paddingNum*positionOffset);            if(position!=viewList.size()-1){            viewList.get(position).setPadding(paddingCurr, paddingCurr, paddingCurr, paddingCurr);            viewList.get(position+1).setPadding(paddingNext, paddingNext, paddingNext, paddingNext);            //第N页滑向第N+1页 position=N;第N+1页滑向第N页,position=N;            }}@Overridepublic void onPageSelected(int position) {}  }}


截图:



0 0
原创粉丝点击