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

本文介绍了如何在Android中使用ViewPager结合OnPageChangeListener接口实现页面的手动切换。详细讲解了OnPageChangeListener的三个方法,并提供了MainActivity的代码示例,包括添加图片、设置适配器以及监听器的实现,以实现左右按钮触发的页面切换效果。

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 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);
    }
   
    }
    }  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值