文档章节

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不能高度自适应?height=wrap_content 无效解决办法

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

拉风的道长
2014/06/24
0
9
用ViewPager实现欢迎引导页面

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

zt1212
2012/10/15
0
1
Android 打造一个丝滑的自动轮播控件

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

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

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

一别经年
2014/01/21
0
0
Android ViewPager使用详解

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

Remix_jx
2014/10/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

学习设计模式——命令模式

参考博客 1. 认识命令模式 1. 定义:将一个请求封装成为一个对象,从而可以用不同的请求对客户进行参数化,对请求排队或记录请求日志,并支持可撤销操作。 2. 组织结构: Commond:定义命令的...

江左煤郎
18分钟前
1
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
7
0
GRASP设计模式

此文参考了这篇博客,建议读者阅读原文。 面向对象(Object-Oriented,OO)是当下软件开发的主流方法。在OO分析与设计中,我们首先从问题领域中抽象出领域模型,在领域模型中以适当的粒度归纳...

克虏伯
昨天
0
0
Coding and Paper Letter(四十)

资源整理。 1 Coding: 1.Tomislav Hengl撰写的非官方作者指南:Michael Gould•Wouter Gerritsma。 UnofficialGuide4Authors 2.R语言包rwrfhydro,社区贡献的工具箱,用于管理,分析和可视化...

胖胖雕
昨天
0
0
JAVA 内存回收

参考:https://www.cnblogs.com/leesf456/p/5218594.html 1,JMV 中哪些可以作为 GC Root? 1. 虚拟机栈(栈帧中的局部变量区,也叫做局部变量表)中引用的对象。 2. 方法区中的类静态属性引...

Carlyle_Lee
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部