Android 缩放动画 ScaleAnimation的使用小结
什么是ScaleAnimation
ScaleAnimation即缩放动画,应用场景特别多,比如常见的隐藏菜单点击显示
下面我分两种方式来介绍ScaleAnimation如何使用。
1. xml文件形式
文件名:anim_scale_in.xml
效果:呈现view放大显示效果
源码:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fromXScale="0.0" android:fromYScale="0.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /> </set>
属性解释:
interpolator:动画插入器,该功能在xml里设置貌似无效,需在代码中加
fromXScale:从自身x轴长度多少倍开始缩放,如:fromXScale= 0.5表示从自身X轴长度0.5倍开始缩放
toXScale:缩放到自身x轴长度多少倍结束,如:toXScale = 2.0表示x轴缩放到自身x轴长度2倍结束
上面两条意思就是:该view的x轴从自身x轴长度的0.5倍开始缩放到自身x轴长度的2倍结束
fromYScale:从自身y轴长度多少倍开始缩放,如:fromYScale= 0.5表示从自身y轴长度0.5倍开始缩放
toYScale:缩放到自身y轴长度多少倍结束,如:toYScale = 2.0表示x轴缩放到自身y轴长度2倍结束
pivotX:动画相对于控件X坐标的开始位置
pivotY:动画相对于控件Y坐标的开始位置
如:pivotX = 50%,pivotY = 50% 表示从该控件的中心开始缩放
//表示控件左下角开始 android:pivotX="0" android:pivotY="100%" //表示控件左上角开始 android:pivotX="0" android:pivotY="0" //表示控件右下角开始 android:pivotX="100%" android:pivotY="100%" //表示控件右上角开始 android:pivotX="100%" android:pivotY="0"
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0" android:toYScale="0" /> </set>
OK,现在有了xml布局文件,我们需要用Java代码让他工作起来,如下;
/** * 缩放变大动画 * * @param context * @param view 目标view */ public static void startScaleInAnim(Context context, View view) { Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_scale_in); if (view != null) view.startAnimation(animation); } /** * 缩放缩小动画 * * @param context * @param view 目标view */ public static void startScaleOutAnim(Context context, View view) { Animation animation = AnimationUtils.loadAnimation(context, R.anim.anim_scale_out); if (view != null) view.startAnimation(animation); }
我单独封装在一个动画工具类中,哪里需要就哪里调用。
下面看看代码的执行效果:
缩放同时还可以添加透明度变化,如下:
放大+淡入:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fillEnabled="true" android:fromXScale="0" android:fromYScale="0" android:pivotX="50%" android:pivotY="50%" android:toXScale="1.0" android:toYScale="1.0" /> <!--同时配置淡入功能--> <alpha android:duration="700" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" /> </set>
缩小+淡出
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_interpolator" android:duration="1000" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="50%" android:pivotY="50%" android:toXScale="0" android:toYScale="0" /> <!--同时配置淡出功能--> <alpha android:duration="700" android:fillAfter="true" android:fromAlpha="1" android:toAlpha="0" /> </set>
效果如下:
下拉菜单显示与收回,效果:
显示:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="300" android:fillAfter="true" android:fillEnabled="true" android:fromXScale="1.0" android:fromYScale="0" android:pivotX="100%" android:pivotY="0" android:toXScale="1.0" android:toYScale="1.0" /> <!--同时配置淡入功能--> <alpha android:duration="300" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" /> </set>
收起:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_interpolator" android:duration="300" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="100%" android:pivotY="0" android:toXScale="1.0" android:toYScale="0" /> <!--同时配置淡出功能--> <alpha android:duration="300" android:fillAfter="true" android:fromAlpha="1" android:toAlpha="0" /> </set>
效果:
缩放下拉与收回效果:
显示:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/decelerate_interpolator" android:duration="200" android:fillAfter="true" android:fillEnabled="true" android:fromXScale="0" android:fromYScale="0" android:pivotX="100%" android:pivotY="0" android:toXScale="1.0" android:toYScale="1.0" /> <!--同时配置淡入功能--> <alpha android:duration="200" android:fillAfter="true" android:fromAlpha="0" android:toAlpha="1" /> </set>
收起:
<?xml version="1.0" encoding="utf-8"?> <set xmlns:android="http://schemas.android.com/apk/res/android"> <scale android:interpolator="@android:anim/accelerate_interpolator" android:duration="200" android:fillAfter="true" android:fromXScale="1.0" android:fromYScale="1.0" android:pivotX="100%" android:pivotY="0" android:toXScale="0" android:toYScale="0" /> <!--同时配置淡出功能--> <alpha android:duration="200" android:fillAfter="true" android:fromAlpha="1" android:toAlpha="0" /> </set>
效果:
类似游戏按钮的按下放大再还原效果:
public static void animScaleIn(View view){ //缩放动画 ScaleAnimation animation = new ScaleAnimation(1,1.2f,1,1.2f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f); animation.setDuration(100); animation.setFillAfter(true); animation.setRepeatMode(Animation.REVERSE); animation.setRepeatCount(1); //透明度动画 AlphaAnimation animation1 = new AlphaAnimation(1,0.8f); animation1.setDuration(100); animation1.setRepeatCount(1); animation1.setRepeatMode(Animation.REVERSE); animation1.setFillAfter(true); //装入AnimationSet中 AnimationSet set = new AnimationSet(true); set.addAnimation(animation); set.addAnimation(animation1); if (view != null) view.startAnimation(set); }
效果如下:
备注:由于我的图片是导出视频再用PS转换成的gif,故效率上有所损失,实际动画效果和速度比图片的快。
到此这篇关于Android 缩放动画 ScaleAnimation的文章就介绍到这了,更多相关Android ScaleAnimation内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
详解Android应用开发中Scroller类的屏幕滑动功能运用
这篇文章主要介绍了详解Android应用开发中Scroller类的屏幕滑动功能运用,文中包括各种触摸滑屏手势相关方法的示例,需要的朋友可以参考下2016-02-02Android布局中margin与padding的区别及说明
这篇文章主要介绍了Android布局中margin与padding的区别及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2023-01-01新版Android studio导入微信支付和支付宝官方Demo问题解决大全
这篇文章主要为大家详细介绍了新版Android studio导入微信支付和支付宝官方Demo问题的解决大全,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-07-07Flutter Widget开发Shortcuts快捷键实例
这篇文章主要为大家介绍了Flutter Widget开发Shortcuts快捷键实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-12-12Android 开发中根据搜索内容实现TextView中的文字部分加粗
最近遇到一个需求,需要做一个搜索功能。搜索的内容需要加粗显示。实现方法很简单,下面通过本文给大家分享Android 开发中根据搜索内容实现TextView中的文字部分加粗样式,非常不错,需要的朋友参考下2017-03-03Android 将 android view 的位置设为右下角的解决方法
Android 将 android view 的位置设为右下角的解决方法,需要的朋友可以参考一下2013-05-05Android IPC进程间通信详解最新AndroidStudio的AIDL操作)
这篇文章主要介绍了Android IPC进程间通信的相关资料,需要的朋友可以参考下2016-09-09
最新评论