您的位置:首页 > 移动开发 > Android开发

Android 实现ViewPager中页面的手动切换

2015-12-03 16:58 399 查看
ViewPager在处理滑动事件时候,配合OnPageChangeListener来实现页面手动切换,而且也可以滑动切换。

OnPageChangeListener这个接口需要实现三个方法:

1) onPageScrollStateChanged(int arg0); 状态改变的时候调用。

2) onPageScrolled(int arg0,float arg1,int arg2); 页面在滑动的时候调用。

3) onPageSelected(int arg0);
 页面跳转完后调用。

//Demo方法的MainActivity

public class MainActivity extends Activity {

private static final String TAG = "MainActivity ";

        

private Context mContext;

        private ViewPager mMyImagePager;

private List<View> mAdapterImageList;
private ImageView mMyImage ;
private MyImageAdapter mMyImageAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mContext = this;

                setContentView(R.layout.main_activity);

                mMyImagePager = findViewById(R.id.image_pager);

AddPagerImage();
}

       @Override
protected void onResume() {

super.onResume();

}

@Override
public void onClick(View v) {

switch (v.getId()) {

case R.id.page_scroll_left:
case R.id.page_scroll_right:
ChangeImage(v.getId());
break;

default:
break;
}
}

private void ChangeImage(int viewId) {
int index = mMyImagePager.getCurrentItem();

   if(R.id.page_scroll_left == viewId && index > 0) {
mMyImagePager.setCurrentItem(index - 1, true);
} else if(R.id.page_scroll_right == viewId && 
index < (mAdapterImageList.size() - 1)) {
mMyImagePager.setCurrentItem(index + 1, true);
}
}

private void AddPagerImage() {

int
[]
PageImageSrc = {R.drawable.page1, 


R.drawable.page2, 


R.drawable.page3,


R.drawable.page4};

List<View> list = new
4000
ArrayList<View>();
inflater = LayoutInflater.from(this);

 // 创建多个item 
for (int i = 0; i <
PageImageSrc.length; i++) {
mPageItem = inflater.inflate(R.layout.view_pager_item, null);
mPageItem.findViewById(R.id.page_scroll_left).setOnClickListener(this);
mPageItem.findViewById(R.id.page_scroll_right).setOnClickListener(this);
mAdapterImageList.add(mPageItem);
}

// 创建适配器
mMyImageAdapter = new MyImageAdapter(list);
mMyImagePager.setAdapter(mMyImageAdapter);
// 绑定动作监听器
mMyImagePager.setOnPageChangeListener(new MyImagesPageListener(
mContext, mAdapterImageList));
}

private class MyImageAdapter extends PagerAdapter {

private List<View> imageList;

public MyImageAdapter(List<View> list) {
imageList= list;
}

/**
* Return the number of views available.
*/
@Override
public int getCount() {
return imageList.size();
}

//滑动过后就销毁 
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(imageList.get(position));
}

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

/**
* Create the page for the given position.
*/
@Override
public Object instantiateItem(final ViewGroup container,
final int position) {
View view = imageList.get(position);
container.addView(view );

return view;
}
}

}

//MainActiviyD的布局文件

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/main_activity"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 

    <android.support.v4.view.ViewPager

        android:id="@+id/image_pager"

        android:layout_width="match_parent"

        android:layout_height="match_parent" /> 

</FrameLayout>

//单页布局文件

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/view_pager_item"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:orientation="horizontal">

    

    <ImageView

        android:id="@+id/page_scroll_left"

        android:layout_width="0dp"

        android:layout_height="match_parent"

        android:layout_gravity="center"

        android:layout_weight="0.2"

        android:src="@drawable/page_scroll_left"/>

   

    <ImageView  

       android:id="@+id/image"  

       android:layout_width="0dp"  

       android:layout_height="match_parent"

       android:layout_gravity="center"

       android:layout_weight="0.6"

       android:scaleType="centerCrop"/>

    

    <ImageView

        android:id="@+id/page_scroll_right"

        android:layout_width="0dp"

        android:layout_height="match_parent"

        android:layout_gravity="center"

        android:layout_weight="0.2"

        android:src="@drawable/page_scroll_right"/>

</LinearLayout>

// 监听器:对页面改变做响应

public class MyImagesPageListener implements OnPageChangeListener {
private static final String TAG = "MyImagesPageListener ";

private Context mContext;
private List<View> mViewList;
private View mLeftView, mRightView;

public MyImagesPageListener () {

}

public MyImagesPageListener (Context context, List<View> viewList) {
this.mContext = context;
this.mViewList = viewList;

View view = mViewList.get(0);
mLeftView = view.findViewById(R.id.page_scroll_left);
mRightView = view.findViewById(R.id.page_scroll_right);
if(mViewList.size() > 1) {
mLeftView.setVisibility(View.INVISIBLE);

    mRightView.setVisibility(View.VISIBLE);
} else {
mLeftView.setVisibility(View.INVISIBLE);

    mRightView.setVisibility(View.INVISIBLE);
}
}
 

    @Override  

    public void onPageScrollStateChanged(int state) {

    Log.d(TAG , "onPageScrollStateChanged state=" + state);

    }

      

    @Override  

    public void onPageScrolled(int arg0, float arg1, int arg2) {

    KJLoger.debug(TAG + ", onPageScrolled arg0=" + arg0 + ", arg1=" + arg1 + ", arg2=" + arg2);

    }

    @Override  

    public void onPageSelected(int position) {
View view = mViewList.get(position);
mLeftView = view.findViewById(R.id.page_scroll_left);
mRightView = view.findViewById(R.id.page_scroll_right);

    if(mViewList.size() == 1) {

    mLeftView.setVisibility(View.INVISIBLE);

    mRightView.setVisibility(View.INVISIBLE);

    } else {

    if(position == 0) {

    mLeftView.setVisibility(View.INVISIBLE);

    mRightView.setVisibility(View.VISIBLE);

    } else if(position == (mViewList.size() -1)) {

    mLeftView.setVisibility(View.VISIBLE);

        mRightView.setVisibility(View.INVISIBLE);

    } else {

    mLeftView.setVisibility(View.VISIBLE);

        mRightView.setVisibility(View.VISIBLE);

    }

   

    }

    }  

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android viewpager