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代码如下(示例):

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">

    <rotate
        android:fromDegrees="0"
        android:toDegrees="360"
        android:pivotX="50%"
        android:pivotY="50%"
        android:startOffset="2000"
        android:duration="2000">
    </rotate>

    <translate
        android:duration="2000"
        android:fromXDelta="0"
        android:fromYDelta="0"
        android:toXDelta="-400"
        android:toYDelta="2000"
        />



</set>

JAVA代码如下: 

    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        final ImageView imageView1=getView().findViewById(R.id.imageView20);

        imageView1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
                Animation animation= AnimationUtils.loadAnimation(getContext(),R.anim.rotate);//装载动画
                Animation animation1=AnimationUtils.loadAnimation(getContext(),R.anim.translate);
                imageView1.startAnimation(animation);//开始动画
                //imageView1.startAnimation(animation1);
              
               //动画监听
           
                animation.setAnimationListener(new Animation.AnimationListener() {
                    @Override
                    public void onAnimationStart(Animation animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                     NavController navController= Navigation.findNavController(view);
                      navController.navigate(R.id.action_gamestart_to_page3);
                      Navigation.findNavController(view).navigate(R.id.action_gamestart_to_page3);
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {

                    }
                });

            }

        });


    }

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

2.纯编码方式

代码如下(示例):

    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
      //  final ImageView imageView1=getView().findViewById(R.id.imageView20);
        final TextView textView=getView().findViewById(R.id.textView10);

        RotateAnimation animation=new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);//创建旋转动画对象
        animation.setDuration(5000);
        TranslateAnimation animation1=new TranslateAnimation(Animation.ABSOLUTE,0,Animation.RELATIVE_TO_SELF,-2.5f,Animation.ABSOLUTE,0,Animation.RELATIVE_TO_SELF,0.7f);//创建平移动画对象
        animation1.setDuration(5000);
        final AnimationSet set=new AnimationSet(true);//动画set对象
        set.addAnimation(animation);//加入动画
        set.addAnimation(animation1);



        textView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(final View view) {
        
                textView.startAnimation(set);//开始动画
                set.setAnimationListener(new Animation.AnimationListener() {
                   @Override
                    public void onAnimationStart(Animation animation) {

                    }

                    @Override
                    public void onAnimationEnd(Animation animation) {
                     NavController navController= Navigation.findNavController(view);
                      navController.navigate(R.id.action_gamestart_to_page3);
                    //  Navigation.findNavController(view).navigate(R.id.action_gamestart_to_page3);
                    }

                    @Override
                    public void onAnimationRepeat(Animation animation) {

                    }
                });

            }

        });


    }

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

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

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

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


总结

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

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

编程(5h):android开发

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

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天真小巫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值