今天在看苏州通的代码,里面有个引导的代码,涉及到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. 🐒-mysql(1)

    Mac 终端启动mysql 本文下载的mysql版本为:5.7.17.MySQL Workbench版本为:5.2.47(后面会提及如何选择下载版本) 一.下载MySQL 1.1.访问http://w ...

  2. SSLv3协议、TLSv1.2协议配置不对导致javax.ws.rs.ProcessingException: java.net.SocketException: Connection reset

    SSl:Secure Sockets Layer 安全套接层 TLS:Transport Layer Security传输层安全 是为网络通信提供安全及数据完整性的一种安全协议.TLS与SSL在传输层 ...

  3. xrange()与range()

    range(start,stop,step) range(0,8) >>print range(0,8) [0,1,2,3,4,5,6,7] range()返回一个数字列表. start ...

  4. 阿里云-对象储存OSS

    最近 需要搞一个阿里云的文件上传 手机端主要做了图片上传 pod安装:pod 'AliyunOSSiOS', '~> 2.5.2' 主要就是需要四个参数:accessKey secretKey  ...

  5. storm实战总结笔记

    storm是一款开源的.分布式的.低延迟的.可扩展的.容错的实时计算框架,采用clojure和java的混合编程,总体两者的代码总量是55开的,但clojure语言具有很强的表现力,所以storm的核 ...

  6. vs2008编译FileZilla服务端源码

    vs2008编译FileZilla服务端源码 FileZilla服务端下载地址:https://download.filezilla-project.org/server/.FileZilla服务端源 ...

  7. linux下安装LoadRunner LoadGenerator

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

  8. Trie树(字典树)

    传送门:http://hihocoder.com/problemset/problem/1014 #1014 : Trie树 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描 ...

  9. PostgreSQL ----- No relations found.

    本篇文章可能有错,尚未细细研究 运行\d出错: No relations found. \d只显示可见的表,也就是该数据库的schema在search_path中. SHOW search_path; ...

  10. 帝国cms

    1:帝国cms 设置安装完成 2: 帝国cms 封面页模板 内容页模板和列表页模板完成