今天在看苏州通的代码,里面有个引导的代码,涉及到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. bootstrap页面模板

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  2. My97DatePicker -- 一个功能丰富, 而且兼容 ie 6, 7的日期选择组件

    easyUI 也提供了 功能强大的日期组件, 可惜在ie 6,7,8下会报错,没有找到 addEventListener , JSON,  可能现在不想再支持低版本ie了 另外avalon也提供了 日 ...

  3. SEO定义目的,优化的好处

    SEO:search engine optimization(搜索引擎优化) SEO严谨的定义:SEO是指在了解搜索引擎自然排名机制的基础上,对网站进行内部及外部的调整优化,改进网站在搜索引擎中关键字 ...

  4. linux下安装LoadRunner LoadGenerator

    root用户登录 关闭防火墙: setenforce 0 /etc/init.d/iptables stop 先安装一个rpm包,compat-libstdc++-33-3.2.3-61.i386.r ...

  5. C# lesson3

    一.局部变量和成员变量 1.程序入口(Main)要调用非静态成员(变量或方法)的话,是需要通过对象去调用的: 2.普通方法里面去调用变量或方法的话可以直接调用 成员变量(全局变量):放在Main方法之 ...

  6. Webbench源代码分析(转载)

    转载地址 http://blog.csdn.net/kangroger/article/details/42500703 Web Bench是一个网站压力测试的工具.其最后更新时间是2004年,已经十 ...

  7. VHDL设计问题

    在做算术运算的时候,不可以用std_ulogic_vector,必须是std_logic_vector.

  8. #Eureka 客户端和服务端间的交互

    Eureka 服务器客户端相关配置 1.建立eureka服务器 只需要使用@EnableEurekaServer注解就可以让应用变为Eureka服务器,这是因为spring boot封装了Eureka ...

  9. unity 组件开发

    //在unit菜单加入Component->b2Components->b2BodyComponent [AddComponentMenu("b2Components/b2Bod ...

  10. 计算机网络课程优秀备考PPT之第四章介质访问控制层(四)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 计算机网络课程优秀备考PPT之第 ...