动画杂谈
来源:互联网 发布:磨刀器哪个牌子好 知乎 编辑:程序博客网 时间:2024/06/07 18:55
动画分类
xxx
示例
晃动
/** * 补间晃动 * * @param cycleTimes * @return */public static Animation shakeAnimation(float cycleTimes, long duration) { Animation translateAnimation = new TranslateAnimation(0, 10, 0, 10); translateAnimation.setInterpolator(new CycleInterpolator(cycleTimes)); translateAnimation.setDuration(duration); return translateAnimation;}
位移
/*** 补间位移** @param fromX* @param toX* @param fromY* @param toY* @param duration* @return*/public Animation translateAnimation(float fromX, float toX, float fromY, float toY, long duration) { TranslateAnimation translateAnimation = new TranslateAnimation(fromX, toX, fromY, toY); translateAnimation.setDuration(duration); translateAnimation.setFillAfter(true); return translateAnimation;}
/** * 属性Y位移 * * @param v * @param duration */public static void translationY(View v, float trEnd, long duration) { float curTranslationY = v.getTranslationY(); ObjectAnimator oa = ObjectAnimator.ofFloat(v, "translationY", curTranslationY, trEnd); oa.setDuration(duration);}
缩放
/** * 属性XY缩放 * * @param view */public static void scaleProperty(View view, long duration) { ObjectAnimator animatorX = ObjectAnimator.ofFloat(view, "scaleX", 1f, 0, 1f); ObjectAnimator animatorY = ObjectAnimator.ofFloat(view, "scaleY", 1f, 0, 1f); AnimatorSet animSet = new AnimatorSet(); animSet.play(animatorX).with(animatorY); animSet.setDuration(duration); animSet.start();}
渐变
/** * 属性XY渐变 * * @param v * @param start * @param end * @param duration */public static void gradual(final View v, int start, int end, long duration, int interpolator) { ValueAnimator va = ValueAnimator.ofInt(start, end); final ViewGroup.LayoutParams params = v.getLayoutParams(); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int h = (int) animation.getAnimatedValue(); params.height = h; v.setLayoutParams(params); v.requestLayout(); } }); va.addListener(new AnimatorListenerAdapter() { @Override public void onAnimationStart(Animator animation) { super.onAnimationStart(animation); } @Override public void onAnimationEnd(Animator animation) { super.onAnimationEnd(animation); } }); switch (interpolator) { case 1: va.setInterpolator(new AccelerateInterpolator(2f)); break; case 2: va.setInterpolator(new BounceInterpolator()); break; default: break; } va.setDuration(duration); va.start();}
/** * 属性XY渐变 * * @param v * @param start * @param end * @param duration * @return */public static ValueAnimator gradualReturn(final View v, int start, int end, long duration) { ValueAnimator va = ValueAnimator.ofInt(start, end); final ViewGroup.LayoutParams params = v.getLayoutParams(); va.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { @Override public void onAnimationUpdate(ValueAnimator animation) { int h = (int) animation.getAnimatedValue(); params.height = h; v.setLayoutParams(params); v.requestLayout(); } }); va.setDuration(duration); return va;}
透变
/** * 属性透变 * * @param v * @param duration */public static void alphaView(View v, long duration) { ObjectAnimator oa = ObjectAnimator.ofFloat(v, "alpha", 0f, 1f); oa.setDuration(duration);}
比较
- 位移动画改变位置即对View操作,属性位移改变位置与属性值即对值操作。控件发生位移动画,位置改变但属性值不变,结束后不可点;发生属性位移,位置与属性值同变,结束后仍可点。
- 属性渐变适用布局宽高渐变,渐变过程内容无上下左右移动,仅宽高上下左右渐变并实时刷新重绘。
延伸
- RecyclerView内容为图且对图设透变动画需在图显后,图显前无效;平移动画亦如此。
- 如图。黑1/橙2为RecyclerView且平级,黑1宽高
match_parent
,橙2宽match_parent
高wrap_content
。正常情况下橙2于屏幕下方不可见。黑1执行属性XY渐变动画后橙2上移显示;黑1不动,橙2执行属性XY渐变动画无效,仍不显。
阅读全文
0 0
- 动画杂谈
- 关于动画杂谈
- Android 动画杂谈(一)
- Android 动画杂谈 (三)
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 杂谈
- 购物车的简单使用
- IDEA 字体 编码设置
- 关联规则挖掘算法-CATS Tree(Compressed and Arranged Transaction Sequences Tree)
- NestedScrollView中嵌套ViewPager导致不能左右切换的解决方法
- 玩转APK:实现Android APK瘦身99.99%
- 动画杂谈
- ES6学习笔记-Udacity
- 深入理解Spring MVC 思想
- 设计动物声音模拟器
- 利用JDBC连接mysql
- 【JZOJ 5419】【NOIP2017提高A组集训10.24】筹备计划
- Entity Framework With Oracle
- jQuery源码分析
- tensorflow中slim模块api介绍