1、布局文件


a、主布局文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:layout_width="match_parent"
  5. android:layout_height="match_parent"
  6. android:orientation="vertical"
  7. tools:context="lpc.com.animation2demo.MainActivity">
  8. <LinearLayout
  9. android:layout_width="match_parent"
  10. android:layout_height="48dp">
  11. <TextView
  12. android:id="@+id/tv1"
  13. android:text="苹果"
  14. android:gravity="center"
  15. android:layout_weight="1"
  16. android:layout_width="match_parent"
  17. android:layout_height="match_parent" />
  18. <TextView
  19. android:id="@+id/tv2"
  20. android:text="香蕉"
  21. android:gravity="center"
  22. android:layout_weight="1"
  23. android:layout_width="match_parent"
  24. android:layout_height="match_parent" />
  25. <TextView
  26. android:text="梨"
  27. android:id="@+id/tv3"
  28. android:gravity="center"
  29. android:layout_weight="1"
  30. android:layout_width="match_parent"
  31. android:layout_height="match_parent" />
  32. </LinearLayout>
  33. <ImageView
  34. android:id="@+id/iv"
  35. android:src="@mipmap/line"
  36. android:scaleType="matrix"
  37. android:layout_width="match_parent"
  38. android:layout_height="wrap_content" />
  39. <android.support.v4.view.ViewPager
  40. android:id="@+id/viewPager1"
  41. android:layout_weight="1"
  42. android:layout_width="match_parent"
  43. android:flipInterval="30"
  44. android:layout_gravity="center"
  45. android:persistentDrawingCache="animation"
  46. android:layout_height="0dp">
  47. </android.support.v4.view.ViewPager>
  48. </LinearLayout>


b、子布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical" android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5. <ImageView
  6. android:background="@drawable/a1"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent" />
  9. </LinearLayout>

另外两子布局类似,只是图片和id不一样

2、主Java文件


  1. package lpc.com.animation2demo;
  2. import android.graphics.BitmapFactory;
  3. import android.graphics.Matrix;
  4. import android.os.Bundle;
  5. import android.support.v4.view.ViewPager;
  6. import android.support.v7.app.AppCompatActivity;
  7. import android.util.DisplayMetrics;
  8. import android.view.LayoutInflater;
  9. import android.view.View;
  10. import android.view.animation.Animation;
  11. import android.view.animation.TranslateAnimation;
  12. import android.widget.ImageView;
  13. import android.widget.TextView;
  14. import java.util.ArrayList;
  15. public class MainActivity extends AppCompatActivity implements View.OnClickListener,ViewPager.OnPageChangeListener{
  16. private TextView tv1; //文本对象1
  17. private TextView tv2; //文本对象2
  18. private TextView tv3; //文本对象3
  19. private ImageView iv; //图片对象(用于移动条)
  20. private ViewPager vp; //Viewpager对象
  21. private ArrayList<View> viewArrayList; //创建一个View储存数组
  22. private int offset = 0; //移动条图片的偏移量
  23. private int currentIndex = 0; //当前页面
  24. private int bmpWidth ; //图片宽度
  25. private int one = 0; //移动条滑动一页的距离
  26. private int two = 0; //滑动条移动两页的距离
  27. @Override
  28. protected void onCreate(Bundle savedInstanceState) {
  29. super.onCreate(savedInstanceState);
  30. setContentView(R.layout.activity_main);
  31. initView();
  32. }
  33. private void initView() {
  34. tv1 = (TextView) findViewById(R.id.tv1);
  35. tv2 = (TextView) findViewById(R.id.tv2);
  36. tv3 = (TextView) findViewById(R.id.tv3);
  37. iv = (ImageView) findViewById(R.id.iv);
  38. vp = (ViewPager) findViewById(R.id.viewPager1);
  39. //下划线动画的相关设置:
  40. bmpWidth = BitmapFactory.decodeResource(getResources(), R.mipmap.line).getWidth();// 获取图片宽度
  41. DisplayMetrics dm = new DisplayMetrics();
  42. getWindowManager().getDefaultDisplay().getMetrics(dm);
  43. int screenW = dm.widthPixels;// 获取分辨率宽度
  44. offset = (screenW / 3 - bmpWidth) / 2;// 计算偏移量
  45. Matrix matrix = new Matrix();
  46. matrix.postTranslate(offset, 0);
  47. iv.setImageMatrix(matrix);// 设置动画初始位置
  48. //移动的距离
  49. one = offset * 2 + bmpWidth;// 移动一页的偏移量,比如1->2,或者2->3
  50. two = one * 2;// 移动两页的偏移量,比如1直接跳3
  51. //往ViewPager填充View,同时设置点击事件与页面切换事件
  52. viewArrayList = new ArrayList<View>();
  53. LayoutInflater inflater = getLayoutInflater();
  54. viewArrayList.add(inflater.inflate(R.layout.view1,null,false));
  55. viewArrayList.add(inflater.inflate(R.layout.view2,null,false));
  56. viewArrayList.add(inflater.inflate(R.layout.view3,null,false));
  57. vp.setAdapter(new MyAdapter(viewArrayList));
  58. vp.setCurrentItem(0); //设置ViewPager当前页,从0开始算
  59. tv1.setOnClickListener(this);
  60. tv2.setOnClickListener(this);
  61. tv3.setOnClickListener(this);
  62. vp.addOnPageChangeListener(this);
  63. }
  64. @Override
  65. public void onClick(View view) {
  66. switch (view.getId()){
  67. case R.id.tv1:
  68. vp.setCurrentItem(0);
  69. break;
  70. case R.id.tv2:
  71. vp.setCurrentItem(1);
  72. break;
  73. case R.id.tv3:
  74. vp.setCurrentItem(2);
  75. break;
  76. }
  77. }
  78. @Override
  79. public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
  80. }
  81. @Override
  82. public void onPageSelected(int position) {
  83. Animation animation = null;
  84. switch (position){
  85. case 0:
  86. if (currentIndex == 1){
  87. animation = new TranslateAnimation(one,0,0,0);
  88. }else if (currentIndex == 2){
  89. animation = new TranslateAnimation(two,0,0,0);
  90. }
  91. break;
  92. case 1:
  93. if (currentIndex == 0){
  94. animation = new TranslateAnimation(offset,one,0,0);
  95. }else if (currentIndex == 2){
  96. animation = new TranslateAnimation(two,one,0,0);
  97. }
  98. break;
  99. case 2:
  100. if (currentIndex == 0){
  101. animation = new TranslateAnimation(offset,two,0,0);
  102. }else if (currentIndex == 1){
  103. animation = new TranslateAnimation(one,two,0,0);
  104. }
  105. break;
  106. }
  107. currentIndex = position;
  108. animation.setFillAfter(true);// true表示图片停在动画结束位置
  109. animation.setDuration(300); //设置动画时间为300毫秒
  110. iv.startAnimation(animation);//开始动画
  111. }
  112. @Override
  113. public void onPageScrollStateChanged(int state) {
  114. }
  115. }

3、适配器文件


  1. package lpc.com.animation2demo;
  2. import android.support.v4.view.PagerAdapter;
  3. import android.view.View;
  4. import android.view.ViewGroup;
  5. import java.util.ArrayList;
  6. /**
  7. * Created by Administrator on 2016/3/16.
  8. * 适配器
  9. */
  10. public class MyAdapter extends PagerAdapter {
  11. //创建一个对象数组 存储View
  12. private ArrayList<View> viewArrayList;
  13. //空构造函数
  14. public MyAdapter() {
  15. }
  16. //初始化对象数组
  17. public MyAdapter(ArrayList<View> viewArrayList) {
  18. this.viewArrayList = viewArrayList;
  19. }
  20. //获取对象数组的大小
  21. @Override
  22. public int getCount() {
  23. return viewArrayList.size();
  24. }
  25. //将视图转化成对象
  26. @Override
  27. public boolean isViewFromObject(View view, Object object) {
  28. return view == object;
  29. }
  30. //获取选定 对象数组并将其添加到viewpager中
  31. @Override
  32. public Object instantiateItem(ViewGroup container, int position) {
  33. container.addView(viewArrayList.get(position));
  34. return viewArrayList.get(position);
  35. }
  36. //移除选定的对象数组对象
  37. @Override
  38. public void destroyItem(ViewGroup container, int position, Object object) {
  39. container.removeView(viewArrayList.get(position));
  40. }
  41. }

4、manifest文件

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns:android="http://schemas.android.com/apk/res/android"
  3. package="lpc.com.animation2demo">
  4. <application
  5. android:allowBackup="true"
  6. android:icon="@mipmap/ic_launcher"
  7. android:label="@string/app_name"
  8. android:supportsRtl="true"
  9. android:theme="@style/AppTheme">
  10. <activity android:name=".MainActivity">
  11. <intent-filter>
  12. <action android:name="android.intent.action.MAIN" />
  13. <category android:name="android.intent.category.LAUNCHER" />
  14. </intent-filter>
  15. </activity>
  16. </application>
  17. </manifest>

5、实现效果






ViewPager的简单使用的更多相关文章

  1. ViewPager的简单用法+适配器+监听器的介绍

    之前的actionbar+fragment文章中写过viewpager的简单用法,但因为是融合的文章,所以今天把viewpager提取出来写了.方便查询浏览~ 思路: 1.在布局文件中设置viewpa ...

  2. viewpager的简单使用,以及ValueAnimator的用法示例

    之前在网上看到一篇viewpager简单使用的例子程序,主要采用了上部标签button+中间指示作用的imageview+下部viewpager的结构,点击上部标签,或者滑动viewpager,均可以 ...

  3. Android随笔--使用ViewPager实现简单地图片的左右滑动切换

    Android中图片的左右切换随处可见,今天我也试着查阅资料试着做了一下,挺简单的一个小Demo,却也发现了一些问题,话不多说,上代码~: 使用了3个xml文件作为ViewPager的滑动page,布 ...

  4. ViewPager的简单例子

    这个例子是按照官网上的例子写的,有点抄袭的嫌疑,但是自己单独写一下会加深自己的印象. 首先是MainAcitivity.xml: <LinearLayout xmlns:android=&quo ...

  5. ViewPager的简单使用说明

    前提:工程中使用ViewPager,需要导入google提供的jar包(android-support-v4.jar). 要学习ViewPager的使用,建议直接看官方文档 Creating Swip ...

  6. Android开发之ViewPager的简单使用

    ViewPager是V4包中的,如果你的编译器敲不出ViewPager,那么你就需要添加,看下面: 第一步:点击+号 第二步:选择第一个Library 第三步:添加这个包: 然后点击ok-->o ...

  7. Android ViewPager的简单实现

    研究了两天ViewPager,看了几篇网上的帖子,但总的来说看得一头雾水,理不清头绪,偶然发现了一篇简单易懂的帖子,讲的调理比较清晰,原文链接附在文后.   在本例中使用ViewPager + Fra ...

  8. android学习ViewPager的简单使用

    使用ViewPager需要引入android.support.v4.View.ViewPager这样的jar包,谷歌公司为解决当前版本碎片化的问题,提供的兼容的包.主要目的就是解决向下兼容问题. 1, ...

  9. TabLayout+ViewPager的简单使用

    1.   build.gradle文件中加入 compile 'com.android.support:design:22.2.0' 2.写Xml文件,注意TabLayout的三个属性 app:tab ...

随机推荐

  1. 【转】HTML5 jQuery图片上传前预览

    hTML5实现表单内的上传文件框,上传前预览图片,针刷新预览images,本例子主要是使用HTML5 的File API,建立一個可存取到该 file的url,一个空的img标签,ID为img0,把选 ...

  2. 记录Castle ActiveRecord访问Sqlite的配置

    1.ActiveRecord配置文件ARConfig.xml,并将配置文件的“生成操作”改成“嵌入的资源” <?xml version=; i < ; i++)             { ...

  3. 移动端使用rem适配及相关问题

    移动端适配方案,说多也很多.可以使用百分比布局,但百分比与em都是基于父元素进行计算的,在实际应用中不是很方便.使用rem不仅可以设置字体大小,块大小也可以设置.而且可以良好的适配各种终端,所以这方案 ...

  4. QTP安装连接Oracle数据库

    之前学过一段时间QTP,之后便没用这个笨重的东东,为了以防忘记,再次记录下曾经连接数据库经历了几天才搞好的事情(虽然这个工具可能已经过时,但是国企一般都会使用的) 前提条件: 你已经安装好了QTP / ...

  5. 基础篇-struts2的搭建

    .---恢复内容开始--- struts的官网是英文版的,不懂怎么下载的话可以跟着我的步骤来做, 首先去struts的官网http://apache.org/下载struts的报jar类包. 往下拉到 ...

  6. Linux CentOS安装postgresql 9.4

    一.前言 PostgreSQL通常也简称Postgres,是一个关系型数据库管理系统,适用于各种Linux操作系统.Windows.Solaris.BSD和Mac OS X.PostgreSQL遵循P ...

  7. leetcode 191

    191. Number of 1 Bits Write a function that takes an unsigned integer and returns the number of ’1' ...

  8. Div添加阴影效果

    -moz-box-shadow: 2px 2px 10px #909090;/*firefox*/ -webkit-box-shadow: 2px 2px 10px #909090;/*safari或 ...

  9. ArcGIS api fo silverlight学习一(silverlight加载GeoServer发布的WMS地图)

    最好的学习资料ArcGIS api fo silverlight官网:http://help.arcgis.com/en/webapi/silverlight/samples/start.htm 一. ...

  10. pycharm 注册码

    43B4A73YYJ-eyJsaWNlbnNlSWQiOiI0M0I0QTczWVlKIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiI ...