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() {
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);
}
}
}
}
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);
}
}
}
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories