1. ViewPager的简介和作用
    ViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view
    1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类。
    2)ViewPager类需要一个PagerAdapter适配器类给它提供数据。
    3)ViewPager经常和Fragment一起使用,并且提供了专门的FragmentPagerAdapter和FragmentStatePagerAdapter类供Fragment中的ViewPager使用。

本文实现ViewPager实现翻页动画,并且下方圆点表示指示当前显示第几页

  1. activity的代码如下:

public class WelGuideActivity extends AppCompatActivity {private ViewPager viewPager;private List<ImageView> ivs;private LinearLayout ll_guide_points;private ImageView iv_point_red;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_wel_guide);getSupportActionBar().hide();init();}private void init() {viewPager=(ViewPager) findViewById(R.id.pager);ll_guide_points=(LinearLayout) findViewById(R.id.ll_guide_points);iv_point_red=(ImageView) findViewById(R.id.iv_point_red);//准备数据initData();// 设置适配器viewPager.setAdapter(new QuickPageAdapter<ImageView>(ivs));viewPager.addOnPageChangeListener(new MyOnPageChangeListener());}private void initData() {int[] imgIds=new int[]{R.drawable.guide_1,R.drawable.guide_2,R.drawable.guide_3};ivs=new ArrayList<ImageView>();for (int i=0;i<imgIds.length;i++){ImageView iv=new ImageView(getApplicationContext());iv.setBackgroundResource(imgIds[i]);ivs.add(iv);//创建灰点ImageView point=new ImageView(getApplicationContext());point.setBackgroundResource(R.drawable.guide_point_normal);// 设置大小LinearLayout.LayoutParams params=new LinearLayout.LayoutParams(30,30);if(i!=0){params.leftMargin=30;}point.setLayoutParams( params);ll_guide_points.addView(point);}}class MyOnPageChangeListener implements ViewPager.OnPageChangeListener {//position 页数,从0 开始,positionOffsetPixels 移动的像素,positionOffset 移动的像素占屏幕宽度的比例@Overridepublic void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {Log.d("Tag",position+"   "+positionOffset+"   "+positionOffsetPixels);int redPointX=(int) (positionOffset+position)*60;// 移动红点,通过修改左边距 30+30=60RelativeLayout.LayoutParams params=(RelativeLayout.LayoutParams) iv_point_red.getLayoutParams();params.leftMargin=redPointX;iv_point_red.setLayoutParams(params);}@Overridepublic void onPageSelected(int position) {}@Overridepublic void onPageScrollStateChanged(int state) {}}
}
  1. 为了简化ViewPager的使用,所以对进行了PagerAdapter封装,以后可根据需要进行调整
public class QuickPageAdapter<T extends View> extends PagerAdapter {private List<T> mList;public QuickPageAdapter(List<T> mList) {this.mList = mList;}@Overridepublic int getCount() {return mList.size();}@Overridepublic boolean isViewFromObject(View view, Object object) {return object == view;}@Overridepublic Object instantiateItem(ViewGroup container, int position) {container.addView(mList.get(position));return mList.get(position);}@Overridepublic void destroyItem(ViewGroup container, int position, Object object) {container.removeView(mList.get(position));}
}

简化之后,使用它,这样不用每次都写个适配器
List views = new ArrayList();

mViewPager.setAdapter(new QuickPageAdapter(views));

  1. 至于红点和灰点,为Drawable下的shape文件

红点颜色为#f00, 灰点为@android:color/darker_gray

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="oval"><solid android:color="#f00" />
</shape>
  1. Activity的布局内容如下
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:id="@+id/activity_wel_guide"android:layout_width="match_parent"android:layout_height="match_parent"><android.support.v4.view.ViewPager
        android:id="@+id/pager"android:layout_height="match_parent"android:layout_width="match_parent"/><RelativeLayout
        android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:layout_marginBottom="40dp"><LinearLayout
            android:id="@+id/ll_guide_points"android:orientation="horizontal"android:layout_width="wrap_content"android:layout_height="wrap_content"/><ImageView
            android:id="@+id/iv_point_red"android:layout_width="10dp"android:layout_height="10dp"android:background="@drawable/guide_point_red"/></RelativeLayout></RelativeLayout>

6.上述就实现了翻页动画和圆点指示功能,但是有一点需要注意一下。

  1. 红点指示当前显示的是哪一页,原理其实是使用id为iv_point_red的ImageView来覆盖ll_guide_points中三个灰点的其中一个,第一页则覆盖第一个,第二页则覆盖第二个,以此类推。
  2. 在Activity的布局文件中,iv_point_red的宽和高设置为10dp,在代码中我将灰点设置为了30,经研究此处的单位应该为px, 所以说灰点为30px,dp和px的关系如下
    **dp是虚拟像素,在不同的像素密度的设备上会自动适配,比如:
    在320x480分辨率,像素密度为160,1dp=1px
    在480x800分辨率,像素密度为240,1dp=1.5px
    计算公式:1dp*像素密度/160 = 实际像素数
    px(像素):屏幕上的点.
    dp(与密度无关的像素):一种基于屏幕密度的抽象单位.在每英寸160点的显示器上,1dp = 1px.**
  3. 我在分辨率为1920*1080 的手机上运行,刚好10dp对等30px,所以才恰好覆盖。注意美观度。
  4. 所以,在代码中我们应该做一个适配,即把我们知道的dp(在布局文件中已经定义)转成需要的px在代码中使用,可以调用如下方法:
private int dp2px(int dp){// px=dp*屏幕的密度比float desity=getResources().getDisplayMetrics().density; //屏幕的密度比int px= (int) (dp*desity+0.5f);return px;
}

关于ViewPager的深入学习可参考大神们写的一些博客:
http://www.jianshu.com/p/e5abbda4a71c ViewPager 全面剖析及使用详解

ViewPager的翻页动画相关推荐

  1. APP启动引导页的制作,用ViewPager实现翻页动画

    #Android网络与数据存储 第一章学习 ####一个启动引导页的制作#### 概要: 这次制作App的引导页,主要用到2个知识"SharedPreferences 和 ViewPager ...

  2. ViewPager实现翻页效果导航点

    ViewPager实现翻页效果&导航点 代码下载:https://jww.lanzous.com/i37TMos71uf or: https://download.csdn.net/downl ...

  3. Android开发笔记(十八)书籍翻页动画PageAnimation

    前面几节的动画都算简单,本文就介绍一个复杂点的动画--书籍翻页动画.Android有自带的翻页动画ViewPager,不过ViewPager只实现了平移效果.即便使用补间组合动画或者属性动画,也只是把 ...

  4. 6个超炫酷的HTML5电子书翻页动画【转】

    6个超炫酷的HTML5电子书翻页动画 WebGL 演示网址:http://bookcase.chromeexperiments.com 相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏 ...

  5. jQuery仿真翻书炫酷翻页动画插件

    下载地址booklet的一款jQuery仿真杂志翻页动画插件,看起来很炫酷的翻书效果. dd:

  6. html5 3d翻页,HTML5 3D书本翻页动画

    这是一款十分炫酷的HTML5 3D书本翻页动画,效果相对比较简单,拖拽鼠标模拟用手翻页,更漂亮的是翻页过程中,呈现出逼真的3D立体效果.书本中的文字和图片也会3D展示,非常酷. HTML代码 Lore ...

  7. h5制作app,处理跳转翻页动画效果及android返回键路由跳转问题

    在h5制作的app中,设计路由跳转及跳转翻页动画是最必要的.其中有很多需要注意的问题,分享下小编的处理方式~ 一.翻页效果 首先,跳转翻页动画的监控,因为小编是用vue学的,所以在app.vue中监控 ...

  8. HTML5 3D书本翻页动画

    这是一款十分炫酷的HTML5 3D书本翻页动画,效果相对比较简单,拖拽鼠标模拟用手翻页,更漂亮的是翻页过程中,呈现出逼真的3D立体效果.书本中的文字和图片也会3D展示,非常酷. HTML代码 < ...

  9. css 右上角 翻开动画_6个超炫酷的HTML5电子书翻页动画

    相信大家一定遇到过一些电子书网站,我们可以通过像看书一样翻页来浏览电子书的内容.今天我们要分享的HTML5应用跟电子书翻页有关,我们精选出来的6个电子书翻页动画都非常炫酷,而且都提供源码下载,有需要的 ...

  10. swiper-页面的翻页动画--渐变效果

    这次内容我们介绍在swiper页面的翻页动画--渐变效果 既然有翻页,那么肯定少不了翻页效果,这个功能在swiper当中也给我们进行了包装,所以我们在使用的时候变得非常的方便. 首先进行基本的布局以及 ...

最新文章

  1. 该如何对「半监督学习算法」实际性应用进行评估?Google给出了新答案
  2. Python_编写UDP通信编解码类、文件的上传、远程执行命令、黏包
  3. android:intent flags
  4. Gradle学习网站
  5. 网站页面左右_广州网站优化的技巧是什么?
  6. 0-1背包问题(物品不可分割)
  7. lintcode循环数组之连续子数组求和
  8. 关于url路径的定义方式
  9. Eclipse 相同变量背景高亮显示设置(Occurrences)
  10. Java提高性能的50个优化,记得收藏
  11. CEO如何做好企业战略管理?
  12. rgba与十六进制的相互转换,以及rgba的校验
  13. 5G中大规模MIMO系统通信的若干分析
  14. 大型超市计算机管理系统论文,大型超市进销存管理系统的设计与实现
  15. c语言中数的表示 叙述正确,关于C语言中数的表示,以下叙述正确的是(
  16. 小米10开始抓取日志怎么关闭_除了*#*#6485#*#*,小米手机还有这些神秘暗号
  17. GO语言获取文件的大小
  18. 计算机毕业设计JAVA课堂管理系统小程序用户端mybatis+源码+调试部署+系统+数据库+lw
  19. 无线充电---无线电能传输
  20. 5款优秀的开源的ERP系统

热门文章

  1. 传统安防监控直播的四分屏的前端展示代码
  2. 设置<hr>标签的样式
  3. ECharts+Vue实现数据可视化
  4. MySQL基础篇(上)
  5. PS2无线遥控手柄的通讯协议以及c语言代码分析
  6. java 清除stdin缓冲区_使用fflush(stdin)
  7. 经典语录大全微信小程序源码下载多种分类语录
  8. [error]: Found option without preceding group in config file ....\my.ini at line:1
  9. 怎么注册一个docker id
  10. 编写高效 TS 代码的一些建议