package net.oschina.app.util; import android.view.View; import android.view.animation.AlphaAnimation; import android.view.animation.Animation; import android.view.animation.AnimationSet; import android.view.animation.AnticipateInterpolator; import android.view.animation.OvershootInterpolator; import android.view.animation.RotateAnimation; import android.view.animation.ScaleAnimation; import android.view.animation.TranslateAnimation; import android.widget.ImageView; import android.widget.RelativeLayout; /** * 录音动画类 */ public class KJAnimations { /** * 旋转 Rotate */ public static Animation getRotateAnimation(float fromDegrees, float toDegrees, long durationMillis) { RotateAnimation rotate = new RotateAnimation(fromDegrees, toDegrees, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); rotate.setDuration(durationMillis); rotate.setFillAfter(true); return rotate; } /** * 透明度 Alpha */ public static Animation getAlphaAnimation(float fromAlpha, float toAlpha, long durationMillis) { AlphaAnimation alpha = new AlphaAnimation(fromAlpha, toAlpha); alpha.setDuration(durationMillis); alpha.setFillAfter(true); return alpha; } /** * 缩放 Scale */ public static Animation getScaleAnimation(float scaleXY, long durationMillis) { ScaleAnimation scale = new ScaleAnimation(1.0f, scaleXY, 1.0f, scaleXY, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); scale.setDuration(durationMillis); return scale; } /** * 位移 Translate */ public static Animation getTranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta, long durationMillis) { TranslateAnimation translate = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta); translate.setDuration(durationMillis); translate.setFillAfter(true); return translate; } public static Animation clickAnimation(float scaleXY, long durationMillis) { AnimationSet set = new AnimationSet(true); set.addAnimation(getScaleAnimation(scaleXY, durationMillis)); set.setDuration(durationMillis); return set; } public static Animation shakeAnimation(int X) { AnimationSet set = new AnimationSet(true); Animation anim1 = getTranslateAnimation(0, -200, 0, 0, 100); anim1.setStartOffset(100); set.addAnimation(anim1); Animation anim2 = getTranslateAnimation(-200, 400, 0, 0, 200); anim2.setStartOffset(300); set.addAnimation(anim2); Animation anim3 = getTranslateAnimation(400, -200, 0, 0, 200); anim3.setStartOffset(500); set.addAnimation(anim3); Animation anim4 = getTranslateAnimation(-200, 0, 0, 0, 100); anim4.setStartOffset(600); set.addAnimation(anim4); set.setFillAfter(true); set.setDuration(640); return set; } /** * 打开的动画 * * @param relativeLayout * 子菜单容器 * @param background * 子菜单背景 * @param menu * 菜单按钮 * @param durationMillis * 动画时间 */ public static void openAnimation(RelativeLayout relativeLayout, ImageView menu, long durationMillis) { relativeLayout.setVisibility(View.VISIBLE); for (int i = 1; i < relativeLayout.getChildCount(); i++) { ImageView imageView = null; if (relativeLayout.getChildAt(i) instanceof ImageView) { imageView = (ImageView) relativeLayout.getChildAt(i); } else { continue; } int top = imageView.getTop(); int left = imageView.getLeft(); if (top == 0) { top = (menu.getHeight() + 50) * i; } if (left == 0) { left = menu.getLeft(); } AnimationSet set = new AnimationSet(true); set.addAnimation(getRotateAnimation(-360, 0, durationMillis)); set.addAnimation(getAlphaAnimation(0.5f, 1.0f, durationMillis)); set.addAnimation(getTranslateAnimation(menu.getLeft() - left, 0, menu.getTop() - top + 30, 0, durationMillis));// 加30是由于图片上部有一些透明高度 set.setFillAfter(true); set.setDuration(durationMillis); set.setStartOffset((i * 100) / (-1 + relativeLayout.getChildCount())); set.setInterpolator(new OvershootInterpolator(1f)); imageView.startAnimation(set); } } /** * 关闭的动画 * * @param relativeLayout * 子菜单容器 * @param background * 子菜单背景 * @param menu * 菜单按钮 * @param durationMillis * 动画时间 */ public static void closeAnimation(final RelativeLayout relativeLayout, final ImageView menu, long durationMillis) { for (int i = 1; i < relativeLayout.getChildCount(); i++) { ImageView imageView = null; if (relativeLayout.getChildAt(i) instanceof ImageView) { imageView = (ImageView) relativeLayout.getChildAt(i); } else { continue; } AnimationSet set = new AnimationSet(true); set.addAnimation(getRotateAnimation(0, -360, durationMillis)); set.addAnimation(getAlphaAnimation(1.0f, 0.5f, durationMillis)); set.addAnimation(getTranslateAnimation(0, menu.getLeft() - imageView.getLeft(), 0, menu.getTop() - imageView.getTop() + 30, durationMillis));// 加30是由于图片上部有一些透明高度 set.setFillAfter(true); set.setDuration(durationMillis); set.setStartOffset(((relativeLayout.getChildCount() - i) * 100) / (-1 + relativeLayout.getChildCount())); set.setInterpolator(new AnticipateInterpolator(1f)); set.setAnimationListener(new Animation.AnimationListener() { @Override public void onAnimationStart(Animation arg0) {} @Override public void onAnimationRepeat(Animation arg0) {} @Override public void onAnimationEnd(Animation arg0) { relativeLayout.setVisibility(View.GONE); } }); imageView.startAnimation(set); } } }
相关推荐
常用动画效果 Animations 常用写法主要是两种 见代码
Animations 动画展示 轮播广告优化 常用动画界面展示 基层代码
css3 动画应用 animations 和transtions transform在加上JavaScript 可以实现硬件加速动画。
一个Demo,包含了:Animation(动画)的四种类型的xml实现方式和java代码实现方式。
SVG Animations.pdf SVG Animations.pdf SVG Animations.pdf SVG Animations.pdf SVG Animations.pdf SVG Animations.pdf
web-animations-next, web动画的开发库 js 请访问 https://github.com/web-animations/web-animations-jsWeb动画polyfill代码和发布关于polyfill用法的文档提供给polyfill的文档将 Bug 归档到 po
Material-Animations 是一个很好过渡动画库, 可以应用于 Activity 与 Activity 之间的跳转, Fragment 与 Fragment 之间的跳转, 以及各个 View 变化前后的过渡动画。效果图: 标签:Material
iOS Animations 动画 swift ios10
14个3d箭头样式与动画,非常好~可以自己修改使用,14+Arrow+Animations+1.0.unitypackage
从基本的视图动画开始,一直到分层动画、动画约束、视图控制器转换等等! 这本书是给谁的 本书适用于已经了解 iOS 和 Swift 开发基础知识并希望深入研究动画的中高级开发人员。 本书涵盖的内容: - SwiftUI - ...
Sword and Shield Animations v1.0 剑与盾动画Unity游戏资源包unitypackage项目C# 支持Unity版本2020.3.38或更高 手工制作的终结技和剑盾攻击的集合 描述 这是一个动画资源包,为剑和盾的用户提供手工制作的配对动画...
基于该项目的示例: : 依存关系svg-path-properties react-native-svg安装$ npm i react-native-svg-animations --save演示版动画SVGPath 动画SVG路径用法该软件包包含用于在本机显示SVG动画的包装器组件,当前包含...
SwiftUI 天气动画界面源码。1、转化效果.transition(AnyTransition.offset(x:300)).animation(Animation.easeOut(duration: 1.0));2、设置位置.position(x: geo.size.width * 0.5, y: geo.size.height * 0.2)。
James Cabello Animations.7z删
animatelo.js是一款基于Web Animations API的js动画库插件。通过animatelo.js动画库插件可以制作出63种炫酷的过渡动画效果,这些动画效果和animate.css相似。
Magic CSS3 Animations 是 CSS3 动画的包,伴有特殊的效果,用户可以自由的在 web 项目中使用。Magic CSS3 Animations 结构非常简单,包括 CSS 样式:magic.css 或者是 mynified 版本:magic.min.css。 ...
Creating Web Animations 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除
animations
颤抖的交错动画 轻松将交错动画添加到ListView , GridView , Column和Row子级,如所示 展示柜 列表显示 网格视图 柱子 Flutter 2.0和null安全 从1.0.0版本开始, flutter_staggered_animations是null安全的,并且...
水平立方翻转