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

布局文件里添加viewPager布局

[html] view
plain
copy

  1. <android.support.v4.view.ViewPager
  2. android:id="@+id/search_viewpager"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:layout_gravity="center" >
  6. </android.support.v4.view.ViewPager>

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



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

[java] view
plain
copy

  1. public class SearchAllcityActivity extends Activity {
  2. private KeywordsFlow keywordsFlow;
  3. private ViewPager viewPager;
  4. private ImageView imageView;
  5. private List<View> lists = new ArrayList<View>();
  6. private ViewPagerAdapter adapter;
  7. private Bitmap cursor;
  8. private int offSet;
  9. private int currentItem;
  10. private Matrix matrix = new Matrix();
  11. private int bmWidth;
  12. private Animation animation;
  13. private Button shuaxin_sq, shuaxin_fl;
  14. public void onCreate(Bundle savedInstanceState) {
  15. super.onCreate(savedInstanceState);
  16. setContentView(R.layout.search_allcity);
  17. // 随页面滑动图片
  18. imageView = (ImageView) findViewById(R.id.viewpaget_img);
  19. // 热门商圈和热门分类 页面添加到viewPager集合
  20. lists.add(getLayoutInflater().inflate(R.layout.search_hot_shangqu, null));
  21. lists.add(getLayoutInflater().inflate(R.layout.search_hot_fenlei, null));
  22. // 初始化滑动图片位置
  23. initeCursor();
  24. adapter = new ViewPagerAdapter(lists);
  25. viewPager = (ViewPager) findViewById(R.id.search_viewpager);
  26. viewPager.setAdapter(adapter);
  27. // ViewPager滑动监听器
  28. viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
  29. @Override
  30. public void onPageSelected(int arg0) {
  31. // TODO Auto-generated method stub
  32. // 当滑动时,顶部的imageView是通过animation缓慢的滑动
  33. switch (arg0) {
  34. case 0:
  35. if (currentItem == 1) {
  36. animation = new TranslateAnimation(offSet * 2 + bmWidth, 0, 0,0);
  37. } else if (currentItem == 2) {
  38. animation = new TranslateAnimation(offSet * 4 + 2 * bmWidth, 0,0, 0);
  39. }
  40. break;
  41. case 1:
  42. if (currentItem == 0) {
  43. animation = new TranslateAnimation(0, offSet * 2 + bmWidth, 0,0);
  44. } else if (currentItem == 2) {
  45. animation = new TranslateAnimation(4 * offSet + 2 * bmWidth,offSet * 2 + bmWidth, 0, 0);
  46. }
  47. break;
  48. }
  49. currentItem = arg0;
  50. animation.setDuration(500);
  51. animation.setFillAfter(true);
  52. imageView.startAnimation(animation);
  53. }
  54. @Override
  55. public void onPageScrolled(int arg0, float arg1, int arg2) {
  56. // TODO Auto-generated method stub
  57. }
  58. @Override
  59. public void onPageScrollStateChanged(int arg0) {
  60. // TODO Auto-generated method stub
  61. }
  62. });
  63. }
  64. /**
  65. * 计算滑动的图片的位置
  66. */
  67. private void initeCursor() {
  68. cursor = BitmapFactory.decodeResource(getResources(),R.drawable.viewpager_img);
  69. bmWidth = cursor.getWidth();
  70. DisplayMetrics dm;
  71. dm = getResources().getDisplayMetrics();
  72. offSet = (dm.widthPixels - 2 * bmWidth) / 4;
  73. matrix.setTranslate(offSet, 0);
  74. imageView.setImageMatrix(matrix); // 需要iamgeView的scaleType为matrix
  75. currentItem = 0;
  76. }
  77. }

最后,不能忘了ViewPager的Adapter

[java] view
plain
copy

  1. public class ViewPagerAdapter extends PagerAdapter{
  2. List<View> viewLists;
  3. public ViewPagerAdapter(List<View> lists)
  4. {
  5. viewLists = lists;
  6. }
  7. @Override
  8. public int getCount() {                                                                 //获得size
  9. // TODO Auto-generated method stub
  10. return viewLists.size();
  11. }
  12. @Override
  13. public boolean isViewFromObject(View arg0, Object arg1) {
  14. // TODO Auto-generated method stub
  15. return arg0 == arg1;
  16. }
  17. @Override
  18. public void destroyItem(View view, int position, Object object)                       //销毁Item
  19. {
  20. ((ViewPager) view).removeView(viewLists.get(position));
  21. }
  22. @Override
  23. public Object instantiateItem(View view, int position)                                //实例化Item
  24. {
  25. ((ViewPager) view).addView(viewLists.get(position), 0);
  26. return viewLists.get(position);
  27. }
  28. }

ViewPager的使用方法的更多相关文章

  1. ViewPager的setOnPageChangeListener方法详解

    http://www.eoeandroid.com/forum.php?mod=viewthread&tid=548173 ViewPage使用时,最关键的代码就是setOnPageChang ...

  2. ViewPager的使用方法和实现过程

    布局文件里添加viewPager布局 <android.support.v4.view.ViewPager android:id="@+id/search_viewpager" ...

  3. 【android】解决Viewpager设置高度为wrap_content无效的方法

    今天发现设置viewpager高度为wrap_content时并没作用.stackoverflow给出了解决方式,就是自己定义viewpager,重写onMesure()方法: public clas ...

  4. Android中Fragment和ViewPager那点事儿(仿微信APP)

    在之前的博文<Android中使用ViewPager实现屏幕页面切换和引导页效果实现>和<Android中Fragment的两种创建方式>以及<Android中Fragm ...

  5. Android中使用ViewPager实现屏幕页面切换和页面切换效果

    之前关于如何实现屏幕页面切换,写过一篇博文<Android中使用ViewFlipper实现屏幕切换>,相比ViewFlipper,ViewPager更适用复杂的视图切换,而且Viewpag ...

  6. Android 引导页公共方法LeaderPager

    SimpAndroidFarme是近期脑子突然发热想做的android快速开发的框架,目标是模块化 常用的控件,方便新手学习和使用.也欢迎老鸟来一起充实项目:项目地址 引导页是我们开发app很常用的功 ...

  7. android ViewPager使用遇到的问题

    项目需求是需要实现一个有两页可滑动的界面,就想到了使用ViewPager,在实现是没有深入考虑,就直接使用了PagerAdapter,页面是正常实现了,可是发现无法流畅的刷新页面(直接使用notify ...

  8. ViewPager 的页面重置问题

    当我们使用ViewPager控件时,假设我们的ViewPager有三页,当我们第一次启动ViewPager显示第一页的时候,ViewPager会预加载第二页,这样当我们向第二页滑动的时候就可以看见第二 ...

  9. Android Tab -- 使用ViewPager、Fragment、FragmentPagerAdapter来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换:点击标签切换. 代码:https://github.com/l ...

随机推荐

  1. release和retain还有多少人在用

    这年头,看到做IOS开发的专业公司,居然还在用release和retain这样的内存管理方式,是为了表示他很厉害吗? 我只能说他没有跟上时代的潮流,或者就是参加了某种老掉牙的IOS速成培训再入行的. ...

  2. 使用eclipse逆向工程开发hibernate项目

    在项目设计时,要么根据需求分析建立实体类,然后正向生成数据库表:要么先进行数据库表设计,然后逆向生成实体类.也就是说,不会完成一方的设计后再花时间去匹配建立另一方,这么做的原因是: 1.如果不使用正向 ...

  3. 神经网络卷积层 要回计算output的维度 input 28 卷积是3x3 则output是26 但是channel是卷积核的数量

    model = Sequential() model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=input_s ...

  4. python--关于if __name__==__main__的解释

    在解释之前首先我们看下__name__这个变量存的是什么: #!/usr/bin/env python # -*- coding:utf-8 -*- print(__name__) 结果: __mai ...

  5. 条款36:绝对不要重新定义,继承而来的non-virtual函数

    重新定义一个继承而来的non-virtual函数可能会使得导致当函数被调用的时候,被调用的函数不是取决于调用的函数究竟属于的对象,而是取决于调用函数的指针或者引用的类型. 所以一般的说主要有两种观点在 ...

  6. 2018.7.27 wireless charger TX evaluation kit based on STWBC-EP

    1 introduced 我们需要设计一个无线充电方案: 功能需求:通用的无线充电平台 参数要求:8-10W step1: 找寻资料  http://www.ti.com/sitesearch/doc ...

  7. uva11078 - Open Credit System(动态维护关键值)

    这道题使用暴力解法O(n*n)会超时,那么用动态维护最大值可以优化到O(n).这种思想非常实用. #include<iostream> #include<cstdio> #in ...

  8. Webpack之“多页面开发”最佳实战

    前言:相信之前看过这篇文章,前端构建工具之“Webpack”的朋友,对于Webpack有了一定的了解.那么今天就跟大家分享下:如何利用webpack,来进行多页面项目实战开发. 一.项目初始化安装 1 ...

  9. flask之全局对象

    from flask import current_app, g g is a special object that is unique for each request. It is used t ...

  10. Azure VNet介绍

    Azure VNet的介绍 VNet是Azure云中逻辑隔离的虚拟网络.它包含两个含义: Azure的用户可以在VNet中创建自己的各种资源,感觉想自己的数据中心中一样; 在一个VNet中创建的资源和 ...