文档章节

ViewPager的一个简单示例,这个比较乱(20)

f
 flyqilong
发布于 2016/02/27 22:14
字数 716
阅读 42
收藏 0
//布局
<RelativeLayout 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" >

    <TextView
        android:id="@+id/show_info"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#88000000"
        android:gravity="center"
        android:textColor="#fff"
        android:textSize="25sp" />

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/show_info" />

</RelativeLayout>
//代码
public class MainActivity extends Activity implements OnPageChangeListener {
	private TextView show_info;
	private ViewPager viewpager;
	private MypagerAdapter adapter;
	private List<View> imgList = new ArrayList<View>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		// 获取arrays中的资源对象
		// 第二种方式
		TypedArray typedArray = getResources().obtainTypedArray(R.array.img);
		for (int i = 0; i < typedArray.length(); i++) {
			ImageView imageview = new ImageView(this);
			imageview.setImageDrawable(typedArray.getDrawable(i));
			// 当到一个集合中,方便销毁时调用
			imgList.add(imageview);

		}
		show_info = (TextView) this.findViewById(R.id.show_info);
		viewpager = (ViewPager) this.findViewById(R.id.viewpager);
		// adapter = new MypagerAdapter();//第一种
		adapter = new MypagerAdapter(imgList);// 第二种
		viewpager.setAdapter(adapter);

		// 显示头部的提示当前多少也,总页数
		show_info.setText(1 + "/" + adapter.getCount());
		// 实现监听方法
		viewpager.setOnPageChangeListener(this);

	}

	// 使用ViewPager必须要继承PagerAdapter 或者FragmentPagerAdapter
	class MypagerAdapter extends PagerAdapter {
		// 设置数据源 :图片资源
		// 两种方式设置资源 :1.定义资源数组 2.arrays.xml定义————》drawable view
		// 第一种方法
		private int[] img = { R.drawable.car0, R.drawable.car1,
				R.drawable.car2, R.drawable.car3, R.drawable.car4,
				R.drawable.car5, R.drawable.car6, R.drawable.car7, };
		private List<View> imgList;

		@Override
		public int getCount() {
			// return img.length;
			return this.imgList.size();
		}

		public MypagerAdapter(List<View> imgList) {
			this.imgList = imgList;
		}

		public MypagerAdapter() {
		}

		@Override
		public boolean isViewFromObject(View view, Object obj) {
			// 判断当前的视图是否是一个对象,官方文档建议这样写
			return view == obj;
		}

		// 下面两个方法要自己手动重写
		@Override
		// ,每次滑动时都会调用,实例化当前视图。把一个view放在当前的ViewPager位置中
		public Object instantiateItem(ViewGroup container, int position) {
			// 第一种:
			// // 上下文可以上面传进来,也可以用下面的方式获取
			// ImageView imageview = new ImageView(container.getContext());
			// imageview.setImageResource(img[position]);
			// // 记得要把imageview放进当前container(属于pagerVeiw)
			// container.addView(imageview);
			// // 并且记得返回视图
			// return imageview;
			// 第二种;方式
			container.addView(this.imgList.get(position));
			return this.imgList.get(position);

		}

		@Override
		// 销毁滑出去的view,position和当前位置相差1左右,(有缓存)考虑滑回去的缓存
		public void destroyItem(ViewGroup container, int position, Object object) {
			// 如果用图片资源数组无法销毁,所以建议用arrays.xml定义资源,放进一个list集合方便删除
			// super.destroyItem(container, position, object);
			// 第一种方式实现时要把super这个去掉,否则会报错
			// 第二种:
			container.removeView(this.imgList.get(position));// 用arrays.xml定义资源一定要销毁,否则回报错
		}
	}

	@Override
	// 页面滚动的状态改变
	public void onPageScrollStateChanged(int state) {
		switch (state) {
		case ViewPager.SCROLL_STATE_DRAGGING:// 拖动状态

			break;
		case ViewPager.SCROLL_STATE_IDLE:// 停止状态

			break;
		case ViewPager.SCROLL_STATE_SETTLING:// 处于自动滚动时状态

			break;
		}

	}

	@Override
	// 参数:1、位置,2、位置 的偏移量,3、位置偏移量的像素
	public void onPageScrolled(int position, float positionOffset,
			int positionOffsetPixel) {

	}

	@Override
	public void onPageSelected(int position) {
		// 设置显示滑动当前的位置改变
		show_info.setText((position + 1) + "/" + adapter.getCount());
	}
}
//数组文件
<?xml version="1.0" encoding="utf-8"?>
<resources>

    <array name="img">
        <item>@drawable/car0</item>
        <item>@drawable/car1</item>
        <item>@drawable/car2</item>
        <item>@drawable/car3</item>
        <item>@drawable/car4</item>
        <item>@drawable/car5</item>
        <item>@drawable/car6</item>
        <item>@drawable/car7</item>
    </array>

</resources>


© 著作权归作者所有

共有 人打赏支持
f
粉丝 3
博文 93
码字总数 53900
作品 0
Android工程师
私信 提问
用ViewPager实现欢迎引导页面

ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包。大家搜下即可。 ViewPager主要用来组织一组数据,并且通过左右滑动的方式来展示。 现在的大多数应用都会有一...

zt1212
2012/10/15
0
1
Android ViewPager 实现多个页面切换滑动

使用ViewPager这个类可以轻松实现多个页面的滑动功能,而且相对viewgroup来讲要简单容易一些,在此之前我们需要导入 android-support-v4.jar这个jar包,是google提供的扩展包,位置路径为 an...

长平狐
2013/04/25
1K
0
Android 打造一个丝滑的自动轮播控件

现在很多的 App 都有自动轮播的 banner 界面,用于展示广告图片或者显示当前比较热门的一些活动,除了具备比较酷炫的效果之外,通过轮播的方式来减少对界面的占用,也是很赞的一个设计点。本...

developerHaoz
2018/08/08
0
0
android中ViewPager详解--视图滑动、界面卡等效果 (一)

这是谷歌官方给我们提供的一个兼容低版本安卓设备的软件包,里面包囊了只有在安卓3.0以上可以使用的api。而viewpager就是其中之一。利用它,我们可以做很多事情,从最简单的导航,到页面菜单...

一别经年
2014/01/21
0
0
ViewPager不能高度自适应?height=wrap_content 无效解决办法

/* http://my.oschina.net/lifj/blog/283346 */ ViewPager用的很多,主要用啦展示广告条。可是高度却不能自适应内容,总是会占满全屏,即使设置android:height="wrap_content"也是没有用的。...

拉风的道长
2014/06/24
0
9

没有更多内容

加载失败,请刷新页面

加载更多

从 JVM 分析 hibernate-validator NoClassDefFoundError

最近排查一个spring boot应用抛出hibernate.validator NoClassDefFoundError的问题,异常信息如下: Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.hibernat......

微笑向暖wx
18分钟前
1
0
c++指针和字符串

==============================

天王盖地虎626
23分钟前
2
0
从 JVM 分析 hibernate-validator NoClassDefFoundError

最近排查一个spring boot应用抛出hibernate.validator NoClassDefFoundError的问题,异常信息如下: Caused by: java.lang.NoClassDefFoundError: Could not initialize class org.hibernat......

java菜分享
28分钟前
2
0
超500款社交APP对标微信,细分未来社交领域

“微信之父”张小龙在2019微信公开课PRO活动上透露,截止2018年8月,微信的日登录量已超过10亿。腾讯2018年三季度财报显示,QQ智能终端月活跃账户达6.98亿人。 当前微信和QQ无疑是中国最大且...

ThinkSNS账号
35分钟前
1
0
Fiddler 抓包工具总结

序章 Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一...

javaer
37分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部