ViewPager的用法和实现过程

看图先:

        

页面中填充内容是随机关键词飞入和飞出动画效果,随后会更新,如今请先无视吧

首先是 导入jar包   下载地址:android-support-v4.jar

布局文件中加入viewPager布局

        <android.support.v4.view.ViewPager
            android:id="@+id/search_viewpager"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="center" >
        </android.support.v4.view.ViewPager>

再创建两个item布局用于填充在ViewPager里

然后就是Activity了,主要写了左右滑动切换页面,另一个小图片随页面切换 位移的动画效果

public class SearchAllcityActivity extends Activity {

	private KeywordsFlow keywordsFlow;
	private ViewPager viewPager;
	private ImageView imageView;
	private List<View> lists = new ArrayList<View>();
	private ViewPagerAdapter adapter;
	private Bitmap cursor;
	private int offSet;
	private int currentItem;
	private Matrix matrix = new Matrix();
	private int bmWidth;
	private Animation animation;
	private Button shuaxin_sq, shuaxin_fl;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.search_allcity);

		// 随页面滑动图片
		imageView = (ImageView) findViewById(R.id.viewpaget_img);
		// 热门商圈和热门分类 页面加入到viewPager集合
		lists.add(getLayoutInflater().inflate(R.layout.search_hot_shangqu, null));
		lists.add(getLayoutInflater().inflate(R.layout.search_hot_fenlei, null));
		// 初始化滑动图片位置
		initeCursor();
		adapter = new ViewPagerAdapter(lists);
		viewPager = (ViewPager) findViewById(R.id.search_viewpager);
		viewPager.setAdapter(adapter);
		// ViewPager滑动监听器
		viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

			@Override
			public void onPageSelected(int arg0) {
				// TODO Auto-generated method stub
				// 当滑动时,顶部的imageView是通过animation缓慢的滑动
				switch (arg0) {
				case 0:
					if (currentItem == 1) {
						animation = new TranslateAnimation(offSet * 2 + bmWidth, 0, 0,0);
					} else if (currentItem == 2) {
						animation = new TranslateAnimation(offSet * 4 + 2 * bmWidth, 0,0, 0);
					}

					break;
				case 1:
					if (currentItem == 0) {
						animation = new TranslateAnimation(0, offSet * 2 + bmWidth, 0,0);
					} else if (currentItem == 2) {
						animation = new TranslateAnimation(4 * offSet + 2 * bmWidth,offSet * 2 + bmWidth, 0, 0);
					}

					break;
				}
				currentItem = arg0;
				animation.setDuration(500);
				animation.setFillAfter(true);
				imageView.startAnimation(animation);

			}

			@Override
			public void onPageScrolled(int arg0, float arg1, int arg2) {
				// TODO Auto-generated method stub

			}

			@Override
			public void onPageScrollStateChanged(int arg0) {
				// TODO Auto-generated method stub

			}
		});

	}

	/**
	 * 计算滑动的图片的位置
	 */
	private void initeCursor() {
		cursor = BitmapFactory.decodeResource(getResources(),R.drawable.viewpager_img);
		bmWidth = cursor.getWidth();
		DisplayMetrics dm;
		dm = getResources().getDisplayMetrics();
		offSet = (dm.widthPixels - 2 * bmWidth) / 4;
		matrix.setTranslate(offSet, 0);
		imageView.setImageMatrix(matrix); // 须要iamgeView的scaleType为matrix
		currentItem = 0;
	}

}

最后,不能忘了ViewPager的Adapter

public class ViewPagerAdapter extends PagerAdapter{

    List<View> viewLists;

    public ViewPagerAdapter(List<View> lists)
    {
        viewLists = lists;
    }

    @Override
    public int getCount() {                                                                 //获得size
        // TODO Auto-generated method stub
        return viewLists.size();
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        // TODO Auto-generated method stub
        return arg0 == arg1;
    }

    @Override
    public void destroyItem(View view, int position, Object object)                       //销毁Item
    {
        ((ViewPager) view).removeView(viewLists.get(position));
    }

    @Override
    public Object instantiateItem(View view, int position)                                //实例化Item
    {
        ((ViewPager) view).addView(viewLists.get(position), 0);

        return viewLists.get(position);
    }

}
时间: 2024-10-30 00:17:04

ViewPager的用法和实现过程的相关文章

继承PagerAdapter类需要重写五个方法和ViewPager的点击事件方法小结

继承PagerAdapter类需要重写五个方法: public int getCount() { return pages.size(); } 返回page的长度 public boolean isViewFromObject(View arg0, Object arg1) { return arg0==arg1; } 判断instantiateItem(ViewGroup container, int position)返回的要加载的pager对象是不是view视图,是则返回true并显示,不

校园卡水卡最低成本破解具体过程(补上上次工具教程)By:dj1149 -02

有必要申明下:以下是分享工具用法和破解过程,大家切勿做违法的事情别问我银行卡行不行... 大家拿不联网的卡练手就好了上次发出破解工具,大群人都找我出教程=.= 其实我也是刚弄好.所以,这次把教程发出来吧.具体要用的工具有:PN532 和 PL2303 MODULES USB TO TTL软件有:PN532上位机,MFOC 和  MFCUK上一贴:http://www.52pojie.cn/thread-600515-1-1.html--------------------------------

1.面向对象和面向过程

面向过程(一人治天下): 分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候按照预定的控制流程依次调用来解决问题 面向对象(你治官,官帮你治天下): 把解决问题的事务分解成各个对象,把各个逻辑功能封装到对象里,解决问题的时候直接实例化对象调用各功能即可. 面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术. 区别? 只是使用不同的方法和角度去观察一个世界 面向对象方法和面向过程过程根本的不同,就是不再把世界看作是一个紧密关联的系统,而是看成一些相互

Android艺术开发探索第三章————View的事件体系(下)

Android艺术开发探索第三章----View的事件体系(下) 在这里就能学习到很多,主要还是对View的事件分发做一个体系的了解 一.View的事件分发 上篇大致的说了一下View的基础知识和滑动,现在我们再来聊聊一个比较核心的知识点,那就是事件分发了,而且他还是一个难点,我们更加应该掌握,View的滑动冲突一直都是很苦恼的,这里,我们就来一起探索一下 1.点击事件的传递规则 我们分析的点击事件可不是View.OnClickListener,而是我们MotionEvent,即点击事件,关于M

getClass()和getClassLoader()区别 以及ClassLoader详解及用途(文件加载,类加载)

获得ClassLoader的几种方法可以通过如下3种方法得到ClassLoader this.getClass().getClassLoader(); // 使用当前类的ClassLoader Thread.currentThread().getContextClassLoader(); // 使用当前线程的ClassLoader ClassLoader.getSystemClassLoader(); // 使用系统ClassLoader,即系统的入口点所使用的ClassLoader.(注意,s

ClassLoader 详解及用途(写的不错)

ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 1.1 几个相关概念ClassLoader负责载入系统的所有Resources(Class,文件,来自网络的字节流等),通过ClassLoader从而将资源载入JVM  每个class都有一个reference,指向自己的ClassLoader.Class.getClassLoader()  array的ClassLoader就

ClassLoader 详解及用途

ClassLoader主要对类的请求提供服务,当JVM需要某类时,它根据名称向ClassLoader要求这个类,然后由ClassLoader返回这个类的class对象. 1.1 几个相关概念ClassLoader负责载入系统的所有Resources(Class,文件,来自网络的字节流等),通过ClassLoader从而将资源载入JVM 每个class都有一个reference,指向自己的ClassLoader.Class.getClassLoader() array的ClassLoader就是其

死磕 Fragment 的生命周期

死磕 Fragment 的生命周期 本文原创,转载请注明出处. 欢迎关注我的 简书 ,关注我的专题 Android Class 我会长期坚持为大家收录简书上高质量的 Android 相关博文. 本文例子中 github 地址: github 项目链接 曾经在北京拥挤的13号线地铁上,一名背着双肩包穿着格子衫带着鸭舌帽脚踏帆布鞋的程序员讲了一句: "我觉得 Fragment 真的太难用了".从而引起一阵躁动激烈的讨论. 正方观点: Fragment 真的太好用了.要知道因为 Activi

Android---引导界面的制作

一.概述 在我们下载了一个App第一次进入的时候,或者是已有App更新之后第一次进入时,一般都会有一个引导界面,这个界面用于展示本App的基本功能,或者是更新之后版本的重大改进;效果图如下: 这里就简单的记录以下这个功能的实现; 二.实现过程 1.布局页面分析 布局代码如下: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="m