写一篇文章很辛苦啊!!!

转载请注明,联系请邮件nlp30508@qq.com


我学习Android都是结合源代码去学习,这样比较直观,非常清楚的看清效果,觉得很好,今天的学习源码是网上找的源码 百度搜就知道很多下载的地方  网上源码的名字叫:activity切换特效.zip  我的博客写的比较乱,如果本篇文章没有看懂,

请先看上篇文章,地址:http://blog.csdn.net/u014737138/article/details/40859913


关于动画我们先要了解一些知识点:

在XML文件中:
  alpha         渐变透明度渐变效果
  scale          渐变尺寸伸缩渐变效果
  translate    画面转换位置移动渐变效果
  rotate        画面转移旋转渐变效果

关于动画的类:

1 AlphaAnimation          //渐变透明度渐变效果
2 ScaleAnimation          //渐变尺寸伸缩渐变效果
3 TranslateAnimation    //画面转换位置移动渐变效果
4 RotateAnimation       // 画面转移旋转渐变效果


activity切换效果有哪些呢?主要指的是当前的activity以一种什么样的形式展现在用户的面前,就像我们做PPT的时候图片会以各种方式出现,有下面这几种:

一。arrays.xml文件

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="anim_type">
        <item>淡入淡出效果</item>
        <item>放大淡出效果</item>
        <item>转动淡出效果1</item>
        <item>转动淡出效果2</item>
        <item>左上角展开淡出效果</item>
        <item>压缩变小淡出效果</item>
        <item>右往左推出效果</item>
        <item>下往上推出效果</item>
        <item>左右交错效果</item>
        <item>放大淡出效果</item>
        <item>缩小效果</item>
        <item>上下交错效果</item>
    </string-array>
</resources>
二。每种形式我们都可以定义在xml文件中:

<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_longAnimTime" -->
<alpha xmlns:android="http://schemas.android.com/apk/res/android"
       android:interpolator="@android:anim/accelerate_interpolator"
       android:fromAlpha="0.0" android:toAlpha="1.0"
       android:duration="2000" />
属性解释:

<!-- 透明度控制动画效果 alpha
        浮点型值:
        fromAlpha 属性为动画起始时透明度
        toAlpha   属性为动画结束时透明度
        说明: 
        0.0表示完全透明
        1.0表示完全不透明
                     以上值取0.0-1.0之间的float数据类型的数字
        
        长整型值:
        duration  属性为动画持续时间
        说明:     
                     时间以毫秒为单位
-->

<!-- android:interpolator
   Interpolator 被用来修饰动画效果,定义动画的变化率,可以使存在的动画有这几种效果:

accelerated(加速),decelerated(减速),repeated(重复),bounced(弹跳)等。
AccelerateDecelerateInterpolator 在动画开始与结束的地方速率改变比较慢,在中间的时候加速
AccelerateInterpolator  在动画开始的地方速率改变比较慢,然后开始加速
AnticipateInterpolator 开始的时候向后然后向前甩
AnticipateOvershootInterpolator 开始的时候向后然后向前甩一定值后返回最后的值
BounceInterpolator   动画结束的时候弹起
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方快然后慢
LinearInterpolator   以常量速率改变
OvershootInterpolator    向前甩一定值后再回到原来位置

-->

interpolator		指定一个动画的插入器
accelerate_decelerate_interpolator加速-减速 动画插入器
accelerate_interpolator加速-动画插入器
decelerate_interpolator减速- 动画插入器	


淡入淡出效果:alpha: 淡出(alpha_out)和淡入(alpaha_in)

<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android" >
<alpha android:fromAlpha="1.0" android:toAlpha="0" android:duration="2000"/> 

</set>
翻转:(转动)scale:
<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android">
	<scale android:interpolator="@android:anim/accelerate_decelerate_interpolator"
		android:fromXScale="0.0" android:toXScale="1.4" android:fromYScale="0.0"
		android:toYScale="1.4" android:pivotX="50%" android:pivotY="50%"
		android:fillAfter="false" android:duration="2000" />
</set>

属性解释:

<!--
fromXScale 起始时x坐标的尺寸,设置为1.0说明是整个图片x轴的长度 
toXScale   结束时x坐标的尺寸,设置为0.0说明整个图片x轴完全收缩到无 
fromYScale 起始时y坐标的尺寸,设置为1.0说明是整个图片y轴的长度 
toYScale   结束时y坐标的尺寸,设置为1.0说明是在收缩时y轴的长度保持不变 
那么他们的变化都是先对于某一点来变化的,因此pivotX和pivotY就是确定这个点的位置。 
在一个数轴上(原点为图片的左上角,x轴和y轴的射线分别是向右和向下): 
pivotX="50%" 说明是以图片本身的一半作为x轴的坐标; 
pivotY="50%" 说明是以图片本身的一半作为y轴的坐标; 
所以圆心点的坐标就是(0.5x,0.5y)。(x y是原图片的长和高) 
此效果就是以这个点的y轴为轴,x轴不断减小到0。 
duration 是设置的动画执行时间 

-->

rotate:

<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
	android:shareInterpolator="false">
	<scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
		android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0"
		android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%"
		android:duration="2000" android:repeatCount="0" android:startOffset="20"></scale>
	<rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
		android:fromDegrees="0" android:toDegrees="+355" android:pivotX="50%"
		android:pivotY="50%" android:duration="2000" />
</set>

属性解释:

<!--
fromDegrees	为动画起始时物件的角度	说明
					当角度为负数——表示逆时针旋转
					当角度为正数——表示顺时针旋转
					(负数from——to正数:顺时针旋转)
					(负数from——to负数:逆时针旋转)
					(正数from——to正数:顺时针旋转)
					(正数from——to负数:逆时针旋转)
toDegrees	属性为动画结束时物件旋转的角度 可以大于360度
pivotX
pivotY	为动画相对于物件的X、Y坐标的开始位	
属性值说明:50%为物件的X或Y方向坐标上的中点位置,相对于自身。”50“代表绝对位置,“50%p”这代表相对于父控件来说。
-->

定义三种效果放在一起:

<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
	android:shareInterpolator="false">
	<scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
		android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0"
		android:toYScale="1.0" android:pivotX="50%" android:pivotY="50%"
		android:duration="2000"></scale>
	<translate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
		android:fromXDelta="120" android:toXDelta="30" android:fromYDelta="30"
		android:toYDelta="250" android:duration="2000" />
	<rotate android:interpolator="@android:anim/accelerate_decelerate_interpolator"
		android:fromDegrees="0" android:toDegrees="+355" android:pivotX="50%"
		android:pivotY="50%" android:duration="2000" />
</set>

属性translate解释:

fromXDelta	为动画起始时 X坐标上的位置
toXDelta	为动画结束时 X坐标上的位置	
fromYDelta	为动画起始时 Y坐标上的位置
toYDelta	为动画结束时 Y坐标上的位置

两者结合:

<?xml version="1.0" encoding="utf-8"?>
<!-- android:duration="@android:integer/config_mediumAnimTime" -->
<set xmlns:android="http://schemas.android.com/apk/res/android"
	android:shareInterpolator="false">
	<scale android:interpolator="@android:res/anim/accelerate_decelerate_interpolator"
		android:fromXScale="0.0" android:toXScale="1.0" android:fromYScale="0.0"
		android:toYScale="1.0" android:pivotX="0" android:pivotY="0"
		android:duration="2000" android:repeatCount="0" android:startOffset="0"></scale>
	<translate android:fromXDelta="0" android:toXDelta="0"
		android:fromYDelta="0" android:toYDelta="0" android:duration="2000" />
</set>

属性解释:android:startOffset

可以通过设置Animation的startOffset来控制Animation的运行顺序——同时或按顺序运行动画。默认情况下,Animation是同时开始的,但可以通过设置startOffset属性来指定动画在*ms后开始运行。

<!--
Duration[long]		属性为动画持续时间 时间以毫秒为单位
fillAfter [boolean]	当设置为true ,该动画转化在动画结束后被应用
fillBefore[boolean]	当设置为true ,该动画转化在动画开始前被应用
interpolator		指定一个动画的插入器				
repeatCount[int]	动画的重复次数	
RepeatMode[int]		定义重复的行为	1:重新开始  2:plays backward
startOffset[long]	动画之间的时间间隔,从上次动画停多少时间开始执行下个动画
zAdjustment[int]	定义动画的Z Order的改变	0:保持Z Order不变 1:保持在最上层 -1:保持在最下层
-->

<?xml version="1.0" encoding="UTF-8"?>
<set android:interpolator="@android:anim/accelerate_interpolator"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<translate android:duration="2000"
		android:fromYDelta="0.0" android:toYDelta="100.0%p" />
</set>

其他的就不再介绍了,可以使用这四种

  alpha         渐变透明度渐变效果
  scale          渐变尺寸伸缩渐变效果
  translate    画面转换位置移动渐变效果
  rotate        画面转移旋转渐变效果

组合得出自己要的那种效果就可以了。



Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐