[Android基础]动画xml文件
2015-10-23 20:12
501 查看
参考链接:
http://blog.csdn.net/heavenforgold/article/details/7074136 http://www.cnblogs.com/bavariama/archive/2013/01/29/2881058.html http://blog.csdn.net/airk000/article/details/39164685 http://www.cnblogs.com/mengdd/p/3494041.html
动画xml文件有两种:anim文件夹下的和animator文件夹下的,前者只包含位移、旋转、缩放和透明度四种动画,后者则是属性动画。
当想多个动画混合时,只需将要混合的动画放在set标签内。set有一个属性android:ordering,缺省为together,即同时发生,还可以设置为sequentially依次发生。
1.anim文件夹下的(有translate/rotate/scale/alpha四种动画标签)
例子:
a.translate动画标签
android:fromXDelta:X轴方向开始位置
android:toXDelta:X轴方向结束位置
android:fromYDelta:Y轴方向开始位置
android:toYDelta:Y轴方向结束位置
上面四种属性的取值范围还包括:-100%p - 100%p
以第一张图为例,当清楚了位置后,我们就可以实现左右滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。
android:interpolator: 加速器,可以取的值如下:
android:startOffset: 延迟一定时间后运行动画
android:fillAfter:当设置为true时,该动画在动画结束后被应用
b.rotate动画标签
android:fromDegrees
android:toDegrees
当取值为正时,表示顺时针旋转
当取值为负时,表示逆时针旋转
c.scale动画标签 略
d.alpha动画标签 略
如何获取xml中的动画效果:
将动画效果应用到view:
将动画效果应用到activity:
参数enterAnim和exitAnim都应该是R.anim.xxx的形式。如果没有动画则给0。这个函数需要在如startActivity或finish调用之后进行调用。enterAnim的动画会应用在进来(新)的那个Activity上,exitAnim的动画会应用在离去的Activity上。
将动画效果应用到fragment:
1.
FragmentTransaction.setTransition(int transit)
该方法可传入的三个参数是:
TRANSIT_NONE, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。设置好后,在Fragment添加和移除的时候都会有。
注意方法必须在add、remove、replace调用之前被设置,否则不起作用
2.
FragmentTransaction.setCustomAnimations(int enter,int exit)
注意方法必须在add、remove、replace调用之前被设置,否则不起作用。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
注意:
如果fragment是v4包的,那么fragment的动画xml文件只能是在res/anim文件夹下,即fragment的动画不能来自res/animator
如果fragment不是v4包的,那么fragment的动画xml文件只能是在res/animator文件夹下,即fragment的动画不能来自res/anim
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
设置动画监听:
2.animator文件夹下的
例子:
http://blog.csdn.net/heavenforgold/article/details/7074136 http://www.cnblogs.com/bavariama/archive/2013/01/29/2881058.html http://blog.csdn.net/airk000/article/details/39164685 http://www.cnblogs.com/mengdd/p/3494041.html
动画xml文件有两种:anim文件夹下的和animator文件夹下的,前者只包含位移、旋转、缩放和透明度四种动画,后者则是属性动画。
当想多个动画混合时,只需将要混合的动画放在set标签内。set有一个属性android:ordering,缺省为together,即同时发生,还可以设置为sequentially依次发生。
1.anim文件夹下的(有translate/rotate/scale/alpha四种动画标签)
例子:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" > <translate android:duration="300" android:fromXDelta="100%p" android:toXDelta="0" /> </set>
a.translate动画标签
android:fromXDelta:X轴方向开始位置
android:toXDelta:X轴方向结束位置
android:fromYDelta:Y轴方向开始位置
android:toYDelta:Y轴方向结束位置
上面四种属性的取值范围还包括:-100%p - 100%p
以第一张图为例,当清楚了位置后,我们就可以实现左右滑动的切换效果,首先让要退出的Activity从位置2移动到位置1,同时让进入的Activity从位置3移动位置2,这样就能实现从左右切换效果。
android:interpolator: 加速器,可以取的值如下:
@android:anim/accelerate_interpolator: 越来越快 @android:anim/decelerate_interpolator:越来越慢 @android:anim/accelerate_decelerate_interpolator:先快后慢 @android:anim/anticipate_interpolator: 先后退一小步然后向前加速 @android:anim/overshoot_interpolator:快速到达终点超出一小步然后回到终点 @android:anim/anticipate_overshoot_interpolator:到达终点超出一小步然后回到终点 @android:anim/bounce_interpolator:到达终点产生弹球效果,弹几下回到终点 @android:anim/linear_interpolator:均匀速度。 |
android:fillAfter:当设置为true时,该动画在动画结束后被应用
b.rotate动画标签
android:fromDegrees
android:toDegrees
当取值为正时,表示顺时针旋转
当取值为负时,表示逆时针旋转
c.scale动画标签 略
d.alpha动画标签 略
如何获取xml中的动画效果:
Animation animation = AnimationUtils.loadAnimation(context, R.anim.fade_zoom_out);
将动画效果应用到view:
public void startAnimation(Animation animation)
将动画效果应用到activity:
public void overridePendingTransition(int enterAnim, int exitAnim)
参数enterAnim和exitAnim都应该是R.anim.xxx的形式。如果没有动画则给0。这个函数需要在如startActivity或finish调用之后进行调用。enterAnim的动画会应用在进来(新)的那个Activity上,exitAnim的动画会应用在离去的Activity上。
将动画效果应用到fragment:
1.
FragmentTransaction.setTransition(int transit)
该方法可传入的三个参数是:
TRANSIT_NONE, TRANSIT_FRAGMENT_OPEN, TRANSIT_FRAGMENT_CLOSE
分别对应无动画、打开形式的动画和关闭形式的动画。设置好后,在Fragment添加和移除的时候都会有。
注意方法必须在add、remove、replace调用之前被设置,否则不起作用
2.
FragmentTransaction.setCustomAnimations(int enter,int exit)
注意方法必须在add、remove、replace调用之前被设置,否则不起作用。
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
注意:
如果fragment是v4包的,那么fragment的动画xml文件只能是在res/anim文件夹下,即fragment的动画不能来自res/animator
如果fragment不是v4包的,那么fragment的动画xml文件只能是在res/animator文件夹下,即fragment的动画不能来自res/anim
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
设置动画监听:
public void setAnimationListener(AnimationListener listener)
public static interface AnimationListener { void onAnimationStart(Animation animation); void onAnimationEnd(Animation animation); void onAnimationRepeat(Animation animation); }
2.animator文件夹下的
例子:
<?xml version="1.0" encoding="utf-8"?> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:interpolator="@android:interpolator/accelerate_decelerate" android:valueFrom="-1280" android:valueTo="0" android:valueType="floatType" android:propertyName="X" android:duration="2000" />
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together"> <!-- android:ordering together表示同时运行动画, sequentially 表示按顺序执行以下动画 --> <set> <objectAnimator android:propertyName="rotationX" android:repeatCount="50" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="20" /> <objectAnimator android:propertyName="rotationY" android:repeatCount="50" android:repeatMode="reverse" android:valueFrom="0" android:valueTo="45" android:valueType="floatType" /> </set> <set> <objectAnimator android:propertyName="scaleX" android:repeatCount="50" android:repeatMode="reverse" android:valueFrom="1.0" android:valueTo="2.0" > </objectAnimator> <objectAnimator android:propertyName="scaleY" android:repeatCount="50" android:repeatMode="reverse" android:valueFrom="1.0" android:valueTo="2.0" > </objectAnimator> </set> </set>
相关文章推荐
- Android aapt 命令 详细解析
- Android
- android RecyclerView响应点击事件(二)
- Android SlidingDrawer(滑动式抽屉)
- Android 悬浮窗权限问题解决
- Android----ScaleType的使用
- 【FastDev4Android框架开发】Android首页图片自动无限循环轮播Gallery+FlowIndicator(二)
- 【FastDev4Android框架开发】Android快速开发框架介绍(一)
- android 获取控件大小和设置调整控件的位置XY
- Android第三方框架 Universal-Image-Loader的使用,进一步封装
- Android Listview 分页加载数据(滑到底部加载)
- Android模拟产生事件
- Android中View的绘制过程 onMeasure方法简述 附有自定义View例子
- Android studio 利用gradle快速编译出apk
- android自定义RatingBar
- ubuntu14下编译android jrtplib
- 【Android先进】查看手机记忆库状态和应用方法
- Android从服务器获取.9图片失效处理
- Scrollview嵌套Listview出现的问题
- EventBus-再也不用什么Handler了