• android动画的学习与总结


    目录

    • 一、什么是android动画?
    • 二、动画的分类
    • 三、android中动画的两种实现方式

     

    一、动画是什么?

    动画有下面两种情况:

    • 同一个图片通过视图在界面上进行透明度,缩放,旋转,平移的变化(View动画)。
    • 在界面的同一位置上不断切换显示不同的图片(Drawable动画)

    二、动画的分类

    • View Animation
    1. 单一动画
    • 缩放动画(ScaleAnimation)
    • 透明度动画(AlphaAnimation)
    • 旋转动画(RotateAnimation)
    • 平移动画(TranslateAnimation)

       2. 复合动画(AnimationSet)

          由多个单一动画组合在一起的动画

        3.Animation 的公用功能

         setDuration:设置持续时间。(单位:ms)

         setStartOffset:设置开始的延时的时间(单位:ms)

         setFillBefore:设置最终是否固定在起始状态。

         setFillAfter:设置最终是否固定在最后的状态。

         setAnimationListener(AnimationListener listener):设置动画监听。

    本人在项目中需要做一个平移+旋转的按键特效,本以为是信手拈来的事.

    XML代码如下(示例):

    1. <set xmlns:android="http://schemas.android.com/apk/res/android">
    2. <rotate
    3. android:fromDegrees="0"
    4. android:toDegrees="360"
    5. android:pivotX="50%"
    6. android:pivotY="50%"
    7. android:startOffset="2000"
    8. android:duration="2000">
    9. rotate>
    10. <translate
    11. android:duration="2000"
    12. android:fromXDelta="0"
    13. android:fromYDelta="0"
    14. android:toXDelta="-400"
    15. android:toYDelta="2000"
    16. />
    17. set>

    JAVA代码如下: 

    1. public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    2. super.onActivityCreated(savedInstanceState);
    3. final ImageView imageView1=getView().findViewById(R.id.imageView20);
    4. imageView1.setOnClickListener(new View.OnClickListener() {
    5. @Override
    6. public void onClick(final View view) {
    7. Animation animation= AnimationUtils.loadAnimation(getContext(),R.anim.rotate);//装载动画
    8. Animation animation1=AnimationUtils.loadAnimation(getContext(),R.anim.translate);
    9. imageView1.startAnimation(animation);//开始动画
    10. //imageView1.startAnimation(animation1);
    11. //动画监听
    12. animation.setAnimationListener(new Animation.AnimationListener() {
    13. @Override
    14. public void onAnimationStart(Animation animation) {
    15. }
    16. @Override
    17. public void onAnimationEnd(Animation animation) {
    18. NavController navController= Navigation.findNavController(view);
    19. navController.navigate(R.id.action_gamestart_to_page3);
    20. Navigation.findNavController(view).navigate(R.id.action_gamestart_to_page3);
    21. }
    22. @Override
    23. public void onAnimationRepeat(Animation animation) {
    24. }
    25. });
    26. }
    27. });
    28. }

    然后结果便是,动画先平移,然后绕自身旋转。为解决这个疑问,我便上网搜索,最后便是没找到这个XML配置的两种动画同时进行的解决方案。然后便是尝试单纯用java代码的方式来 解决(即第二种实现方式)。

    2.纯编码方式

    代码如下(示例):

    1. public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    2. super.onActivityCreated(savedInstanceState);
    3. // final ImageView imageView1=getView().findViewById(R.id.imageView20);
    4. final TextView textView=getView().findViewById(R.id.textView10);
    5. RotateAnimation animation=new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//创建旋转动画对象
    6. animation.setDuration(5000);
    7. TranslateAnimation animation1=new TranslateAnimation(Animation.ABSOLUTE,0,Animation.RELATIVE_TO_SELF,-2.5f,Animation.ABSOLUTE,0,Animation.RELATIVE_TO_SELF,0.7f);//创建平移动画对象
    8. animation1.setDuration(5000);
    9. final AnimationSet set=new AnimationSet(true);//动画set对象
    10. set.addAnimation(animation);//加入动画
    11. set.addAnimation(animation1);
    12. textView.setOnClickListener(new View.OnClickListener() {
    13. @Override
    14. public void onClick(final View view) {
    15. textView.startAnimation(set);//开始动画
    16. set.setAnimationListener(new Animation.AnimationListener() {
    17. @Override
    18. public void onAnimationStart(Animation animation) {
    19. }
    20. @Override
    21. public void onAnimationEnd(Animation animation) {
    22. NavController navController= Navigation.findNavController(view);
    23. navController.navigate(R.id.action_gamestart_to_page3);
    24. // Navigation.findNavController(view).navigate(R.id.action_gamestart_to_page3);
    25. }
    26. @Override
    27. public void onAnimationRepeat(Animation animation) {
    28. }
    29. });
    30. }
    31. });
    32. }

    最后成功实现动画的旋转平移同时进行的效果,这里我已经将ImageView点击事件 换为了TextView点击事件。难点便是  TranslateAnimation()当中的参数选取的问题。

    参考博文:Animation动画平移和旋转的结合使用_chengjia0847的博客-CSDN博客

                     android动画平移淡出,Android旋转动画和平移动画混合效果_weixin_39578197的博客-CSDN博客

     关于TranslateAnimation()的参数问题_flyiiiiiii的博客-CSDN博客_translateanimation参数


    总结

    阅读(1h):《社会心理学》

    英语(1h):50个单词,10道选择题,一篇阅读题。

    编程(5h):android开发

    运动:早上起来散了一下步,晚上玩了1.5小时的滑板。

  • 相关阅读:
    模拟电路 第二章(三极管及其放大电路)【下】
    性能测试等级知识点
    【MySQL】MySQL的IFNULL()、ISNULL()、NULLIF()函数用法说明
    uniapp组件传值的方法(父传子,子传父,对象传值)案例
    MySQL学习记录 —— 십구 命令执行
    装饰者模式
    一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?
    EventBus详解 (详解 + 原理)
    人工智能将彻底改变营销行业的4种方式
    Vue中实现3D得球自动旋转
  • 原文地址:https://blog.csdn.net/qq_58259539/article/details/125997105