今天在看苏州通的代码,里面有个引导的代码,涉及到viewPager的切换动画:

DepthPageTransformer :
 package com.soyoungboy.guide;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.v4.view.ViewPager;
import android.view.View;
/**
*
* @ClassName: DepthPageTransformer
* @Description: TODO(viewPager切换动画)
*
*/
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
publicclassDepthPageTransformerimplementsViewPager.PageTransformer{
privatestaticfloat MIN_SCALE =0.75f;
/**
* @Name transformPage
* @Description TODO(这里用一句话描述这个方法的作用)
* @param view
* 滑动中的那个view
* @param position
* position这里是float类型,不是平时理解的int位置,而是当前滑动状态的一个表示,比如当滑动到正全屏时,
* position是0
* ,而向左滑动,使得右边刚好有一部被进入屏幕时,position是1,如果前一页和下一页基本各在屏幕占一半时
* ,前一页的position是
* -0.5,后一页的posiotn是0.5,所以根据position的值我们就可以自行设置需要的alpha,x/y信息
* @see android.support.v4.view.ViewPager.PageTransformer#transformPage(android.view.View,
* float)
* @Date 2015-5-25 下午3:13:18
**/
@Override
publicvoid transformPage(View view,float position){
// TODO Auto-generated method stub
int pageWidth = view.getWidth();
if(position <-1){
//前一页
view.setAlpha(0);
}elseif(position <=0){
view.setAlpha(1);
view.setTranslationX(0);
view.setScaleX(1);
view.setScaleY(1);
}elseif(position <=1){
//后一页
view.setAlpha(1- position);
view.setTranslationX(pageWidth *-position);
float scaleFactor = MIN_SCALE +(1- MIN_SCALE)
*(1-Math.abs(position));
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
}else{
view.setAlpha(0);
}
}
}
 
ZoomOutPageTransformer :
 package com.soyoungboy.guide;
import android.annotation.TargetApi;
import android.os.Build;
import android.support.v4.view.ViewPager.PageTransformer;
import android.view.View;
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
publicclassZoomOutPageTransformerimplementsPageTransformer{
privatestaticfloat MIN_SCALE =0.85f;
privatestaticfloat MIN_ALPHA =0.5f;
@Override
publicvoid transformPage(View view,float position){
int pageWidth = view.getWidth();
int pageHeight = view.getHeight();
if(position <-1){// [-Infinity,-1)
// This page is way off-screen to the left.
view.setAlpha(0);
}elseif(position <=1){// [-1,1]
// Modify the default slide transition to
// shrink the page as well
float scaleFactor =Math.max(MIN_SCALE,1-Math.abs(position));
float vertMargin = pageHeight *(1- scaleFactor)/2;
float horzMargin = pageWidth *(1- scaleFactor)/2;
if(position <0){
view.setTranslationX(horzMargin - vertMargin /2);
}else{
view.setTranslationX(-horzMargin + vertMargin /2);
}
// Scale the page down (between MIN_SCALE and 1)
view.setScaleX(scaleFactor);
view.setScaleY(scaleFactor);
// Fade the page relative to its size.
view.setAlpha(MIN_ALPHA +(scaleFactor - MIN_SCALE)
/(1- MIN_SCALE)*(1- MIN_ALPHA));
}else{// (1,+Infinity]
// This page is way off-screen to the right.
view.setAlpha(0);
}
}
}
activity里面使用动画:
 package com.soyoungboy.guide;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
publicclassMainActivityextendsActivityimplementsOnPageChangeListener{
privateTextView pageNum;
privateViewPager vp;
privateList<View> views;
privateViewPagerAdapter vpAdapter;
privateLayoutInflater inflater;
@Override
protectedvoid onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
inflater =LayoutInflater.from(this);
initViews();
initPageNum();
}
privatevoid initPageNum(){
pageNum =(TextView) findViewById(R.id.page_num);
pageNum.setText("");
}
privatevoid initViews(){
views =newArrayList<View>();
/**
* 要加载的引导图片
*/
views.add(inflater.inflate(R.layout.views_one,null));
views.add(inflater.inflate(R.layout.views_two,null));
views.add(inflater.inflate(R.layout.views_three,null));
views.add(inflater.inflate(R.layout.views_four,null));
vpAdapter =newViewPagerAdapter(views,this);
vp =(ViewPager) findViewById(R.id.viewpager);
vp.setPageTransformer(true,newDepthPageTransformer());
// vp.setPageTransformer(true, new ZoomOutPageTransformer());
vp.setAdapter(vpAdapter);
vp.setOnPageChangeListener(this);
}
publicclassViewPagerAdapterextendsPagerAdapter{
privateList<View> views;
privateActivity activity;
publicViewPagerAdapter(List<View> views,Activity activity){
this.views = views;
this.activity = activity;
}
@Override
publicvoid destroyItem(View arg0,int arg1,Object arg2){
((ViewPager) arg0).removeView(views.get(arg1));
}
@Override
publicint getCount(){
if(views !=null){
return views.size();
}
return0;
}
@Override
publicObject instantiateItem(View arg0,int arg1){
((ViewPager) arg0).addView(views.get(arg1),0);
if(arg1 ==0){
AnimationSet animationSet =newAnimationSet(true);
Animation alphaAnimation =AnimationUtils.loadAnimation(
MainActivity.this, R.anim.alpha);
Animation tAnimation =AnimationUtils.loadAnimation(
MainActivity.this, R.anim.trans);
animationSet.addAnimation(alphaAnimation);
animationSet.addAnimation(tAnimation);
ImageView imageView =(ImageView) arg0
.findViewById(R.id.first_image);
imageView.startAnimation(animationSet);
}
if(arg1 == views.size()-1){
Button mStart =(Button) arg0.findViewById(R.id.mstart);
mStart.setOnClickListener(newOnClickListener(){
@Override
publicvoid onClick(View v){
setGuided();
goHome();
}
});
}
return views.get(arg1);
}
@Override
publicboolean isViewFromObject(View arg0,Object arg1){
return(arg0 == arg1);
}
publicvoid goHome(){
// Intent intent = new Intent(activity, ContentActivity.class);
// activity.startActivity(intent);
// overridePendingTransition(android.R.anim.fade_in,
// android.R.anim.fade_out);
// activity.finish();
}
publicvoid setGuided(){
SharedPreferences preferences = activity.getSharedPreferences(
"first_pref",Context.MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putBoolean("isFirst",false);
editor.commit();
}
}
@Override
publicvoid onPageScrollStateChanged(int arg0){
// TODO Auto-generated method stub
}
@Override
publicvoid onPageScrolled(int arg0,float arg1,int arg2){
// TODO Auto-generated method stub
}
@Override
publicvoid onPageSelected(int arg0){
if(arg0 ==0){
pageNum.setText("");
}else{
pageNum.setTextColor(0xFF767676);
pageNum.setText(arg0 +1+" - 4");
}
}
publicvoid onResume(){
super.onResume();
}
publicvoid onPause(){
super.onPause();
}
}
activity_main.xml
 
  1.  <RelativeLayoutxmlns: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"
    tools:context=".GuideActivity">
    <android.support.v4.view.ViewPager
    android:id="@+id/viewpager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>
    <TextView
    android:id="@+id/page_num"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_centerHorizontal="true"
    android:layout_marginBottom="45dp"
    android:textSize="25sp"
    android:textColor="#ffeeeeee"
    android:text="hehe"/>
    </RelativeLayout>
    alpha.xml
    <?xml version="1.0" encoding="utf-8"?>
    <setxmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <alpha
    android:duration="1000"
    android:fromAlpha="0.0"
    android:toAlpha="1.0">
    </alpha>
    </set>
trans.xml
 <?xml version="1.0" encoding="utf-8"?>
<setxmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<translate
android:duration="1000"
android:fromXDelta="50%"
android:fromYDelta="0%"
android:toXDelta="0%"
android:toYDelta="0%">
</translate>
</set>
views_one.xml
  1.  <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/welcomeback"
    android:orientation="vertical">
    <ImageView
    android:id="@+id/first_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/welcome1"
    android:layout_centerVertical="true"
    android:layout_margin="20dp"/>
    </RelativeLayout>
views_two.xml
  1.  <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffffff"
    android:orientation="vertical"
    android:padding="20dp">
    <ImageView
    android:id="@+id/second_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/welcome2"/>
    </RelativeLayout>
views_three.xml
  1. <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="20dp"
    android:background="#ffffffff"
    android:orientation="vertical">
    <ImageView
    android:id="@+id/third_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/welcome3"/>
    </RelativeLayout>
views_four.xml
  1.  <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#ffffffff"
    android:orientation="vertical">
    <ImageView
    android:id="@+id/forth_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerInParent="true"
    android:src="@drawable/welcome4"/>
    <Button
    android:id="@+id/mstart"
    android:layout_below="@+id/forth_image"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="#00ffffff"
    android:text="Start!"
    android:layout_centerHorizontal="true"
    android:textColor="#ffa4a4a4"
    android:padding="20dp"/>
    </RelativeLayout>

源码demo下载地址:

https://github.com/soyoungboy/Guide

对应引用:

https://github.com/soyoungboy/appcompat_v7

viewPager的切换动画的更多相关文章

  1. Android为ViewPager增加切换动画——使用属性动画.

    ViewPager作为Android最常用的的组件之一,相信大家在项目中会频繁的使用到的,例如利用ViewPager制作引导页.轮播图,甚至做整个app的表现层的框架等等. Android3.0以下不 ...

  2. Android至ViewPager添加切换动画——使用属性动画

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44200623 ViewPager作为Android最经常使用的的组件之中的一个.相 ...

  3. Android为ViewPager添加切换动画——自己定义ViewPager

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/44224517 在上篇博客中,我写了一个使用属性动画为ViewPager加入切换动画 ...

  4. ViewPager取消切换动画

    /** * Created by apk2sf on 2017/12/2. * email: apk2sf@163.com * QQ:337081267 */ public class NoAnima ...

  5. Android切换动画之ViewPager

    有过开发经验的程序员都知道这个效果,就是当我们第一次安装一个软件时有一个使用说明的图片切换效果,他是如何实现的呢?今天我们就一起学习一下吧,难度系数1.0,就是只要你仔细分析,都可以学会.废话不多说, ...

  6. 自定义viewpager的界面切换动画

    核心操作: 1.创建一个类实现 android.support.v4.view.ViewPager.PageTransformer 根据 position 实现判断哪个界面进行界面切换动画 publi ...

  7. Android项目实战(四):ViewPager切换动画(3.0版本以上有效果)

    学习内容来自“慕课网” 一般APP进去之后都会有几张图片来导航,这里就学习怎么在这张图片切换的时候添加切换动画效果 先看布局文件 activity_main.layout <?xml versi ...

  8. 简单实现图片间的切换动画 主要用到ViewPager

    简单实现图片间的切换动画 主要用到ViewPagerViewPager是android扩展包v4包中的类,这个类可以让用户左右切换当前的view.ViewPager类需要一个PagerAdapter适 ...

  9. ViewPager切换动画PageTransformer使用

    Android从3.0开始,就添加了很多动画,ViewPager当然也不例外,相对于非常平庸的默认切换动画,Google给我们展示了两个动画例子:DepthPageTransformer和ZoomOu ...

随机推荐

  1. @Autowired与 @Resource

    @Autowired, @Resource 1.注解类型: Autowired可用于构造器.属性.方法.注解 @Target({ElementType.CONSTRUCTOR, ElementType ...

  2. 常用到的简单命令 Sublime Git NPM WindowsCMD MacTerminal(Unix命令)

    sublime 选择标签及其内容 ctrl+shift+a连续按两次 Git 撤销 add 重置暂存区的指定文件,与上一次commit保持一致,但工作区不变 git reset [file] 撤销 c ...

  3. 编写第一个ROS(创建工作空间workspace和功能包package)

    刚接触ROS,学着写了第一个程序,怕以后忘记,就将其步骤记录下来.. 首先你必须保证你电脑已安装配置好ROS. 1.创建工作空间(workspace) 我们所创建功能包package,应该全部放到一个 ...

  4. delphi 关键字

    下面的关键字不能被重新定义或用作标志符:and array as asm begin case class const constructor destructor dispinterface div ...

  5. css3 div垂直居中

    css3: #dd{ height: 300px; background: #0000cc; display: -webkit-box; display: flex; display: -webkit ...

  6. Ray Tracing

    Ray Tracing 题目链接:http://codeforces.com/problemset/problem/724/C 拓展欧几里得 //为什么这次C题这么难啊=.= 可以观察到,光线在矩形中 ...

  7. CSS3秘笈复习:十三章&十四章&十五章&十六章&十七章

    第十三章 1.在使用浮动时,源代码的顺序非常重要.浮动元素的HTML必须处在要包围它的元素的HTML之前. 2.清楚浮动: (1).在外围div的底部添加一个清除元素:clear属性可以防止元素包围浮 ...

  8. JS复习:第七章

    第七章  函数表达式 一.定义函数的方式有两种:函数声明和函数表达式. 1.函数声明: function functionName(arg0 , arg1 , arg2){ //函数体... } 函数 ...

  9. apt-get 安装路径

    apt-get安装目录和安装路径:apt-get 下载后,软件所在路径是:/var/cache/apt/archivesubuntu 默认的PATH为PATH=/home/brightman/bin: ...

  10. Xshell4连接,Linux系统中文显示乱码解决办法

    Xshell 是一个强大的安全终端模拟软件,它支持SSH1, SSH2, 以及Microsoft Windows 平台的TELNET NetSarang Xshell 4 Build 0120议.使用 ...