文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android动画

2022-06-06 13:20

关注

源码地址: https://download.csdn.net/download/dreams_deng/12236355

1. 理论知识

1.1 动画类型:
View动画 :   View本身在动
Drawable动画:  View中内容在动,帧动画,图片在切换
 1.2.android实现动画方式:
 编码方式
 xml方式

1.3. 动画Api :

    scaleAnimation1.setStartOffset(1000);  // 动画延迟时间
    scaleAnimation1.setDuration(10000);   // 持续时间
    scaleAnimation1.setFillBefore(true);  // 最终状态
     img_context.startAnimation(scaleAnimation1);  // 启动动画
     translateAnimation.setRepeatCount(3); //重复次数动画
      translateAnimation.setInterpolator  // 设置动画变化率
      animationSet.setAnimationListener  // 设置动画监听回调

  2. 动画实现

2.1.1.代码实现缩放动画

//锚点位置: 默认位置视图中心点
        // 动画执行效果,1.图形变成原来的0.5倍宽高,2.延迟 1S ,3. 然后开始执行动画 10S 到1.5倍, 执行完毕,恢复默认1.0倍默认大小,4.动画执行中心点设置后面的4个参数都是
      // 动画中心点坐标,缩放中心点坐标:
        // Animation.RELATIVE_TO_SELF  0.5  现对于自己宽度0.5宽度的位置  中心点 X
       // Animation.RELATIVE_TO_PARENT   0.5  现对于父元素的0.5宽度的位置 中心点 X
        //  如何使用,原来的大小不用动 fromX , fromY


public void codeScale(View view) {
        
        // 相对于自己,绝对值
        ScaleAnimation scaleAnimation1=new ScaleAnimation(0.5f,1.5f,0.5f,1.5f,Animation.ABSOLUTE,img_context.getWidth()/2,
                Animation.ABSOLUTE,0);
        // 现对于自己,中心点
        ScaleAnimation scaleAnimation2=new ScaleAnimation(0.5f,1.5f,0.5f,1.5f,Animation.RELATIVE_TO_SELF,0.5f,
                Animation.RELATIVE_TO_SELF,0.5f);
        // 延迟1s开始
        scaleAnimation1.setStartOffset(1000);
      // 持续时间
        scaleAnimation1.setDuration(10000);
        // 最终还原
        scaleAnimation1.setFillBefore(true);
        // 启动动画
        img_context.startAnimation(scaleAnimation1);
        //锚点位置: 默认位置视图中心点
        // 动画执行效果,图形变成原来的0.5倍宽高,延迟 1S , 然后开始执行动画 10S 到1.5s, 执行完毕,恢复默认1.0
      // 动画中心点坐标,缩放中心点坐标:
        // Animation.RELATIVE_TO_SELF  0.5  现对于自己宽度0.5宽度的位置  中心点 X
       // Animation.RELATIVE_TO_PARENT   0.5  现对于父元素的0.5宽度的位置 中心点 X
        //  如何使用,原来的大小不用动 fromX , fromY
    }

  2.1.2  xml实现缩放动画:/res/anim/scale1.xml



   
    
   public void xmlScale(View view) {
       Animation animation= AnimationUtils.loadAnimation(this,R.anim.scale1);
        img_context.startAnimation(animation);
    }

2.2.1  实现旋转动画:


 //    旋转动画  ,  0度旋转到90度,旋转点是图形中心点
        RotateAnimation rotateAnimation=new RotateAnimation(0f,90.0f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        rotateAnimation.setDuration(5000);
        img_context.startAnimation(rotateAnimation);

  /res/anim/rotate_test.xml 代码实现:




    // 默认旋转点是左上角, xml实现
        Animation animation= AnimationUtils.loadAnimation(this,R.anim.rotate_test);
//        img_context.startAnimation(animation);

2.3.1. 实现透明度动画:   从显示到隐藏,


        // 透明度动画
        // 不透明度1  透明度0 不透明
        // 不透明度0  透明度1 透明
        AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
        alphaAnimation.setDuration(5000);
        img_context.startAnimation(alphaAnimation)

  /res/anim/alpha_test.xml 代码实现:




        // 透明度动画, 从显示到隐藏
        animation= AnimationUtils.loadAnimation(this,R.anim.alpha_test);
        img_context.startAnimation(animation);ation);

2.4.1. 实现移动动画:



        TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE, 0,
                Animation.RELATIVE_TO_SELF, 1,
                Animation.ABSOLUTE, 0,
                Animation.RELATIVE_TO_SELF, 1);
        translateAnimation.setDuration(5000);
        translateAnimation.setRepeatCount(3); //重复次数动画
        // Animation.INFINITE) 无限次数
        // 设置动画变化率
        
        translateAnimation.setInterpolator(new AccelerateInterpolator());
        img_context.startAnimation(translateAnimation);

        /res/anim/translate_test.xml 代码实现:



    

       animation= AnimationUtils.loadAnimation(this,R.anim.translate_test);
        img_context.startAnimation(animation);

        3. 综合动画,
      1.1.多个动画同时执行  AnimationSet
      1.1. 如果动画逐个执行,那么设置动画延时,执行第一个完毕,才执行第二个alphaAnimation.setStartOffset(2000);


  public void  codeSetAnimation(View view){
   // 透明度 从 透明到不透明    持续 2s  接着进行旋转360 持续1s
         AlphaAnimation alphaAnimation=new AlphaAnimation(1,0);
         alphaAnimation.setDuration(2000);
         alphaAnimation.setStartOffset(2000); // 设置延时,避免动画同时执行
         RotateAnimation rotateAnimation=new RotateAnimation(0f,360f,
                 Animation.RELATIVE_TO_SELF,0.5f,
                 Animation.RELATIVE_TO_SELF,0.5f
         );
         rotateAnimation.setDuration(1000);
        AnimationSet animationSet=new AnimationSet(true);
        animationSet.addAnimation(alphaAnimation);
        animationSet.addAnimation(rotateAnimation);
        animationSet.setAnimationListener(new Animation.AnimationListener() {
            @Override
            public void onAnimationStart(Animation animation) {
            }
            @Override
            public void onAnimationEnd(Animation animation) {
            }
            @Override
            public void onAnimationRepeat(Animation animation) {
     // 动画重复
            }
        });
        img_context.startAnimation(animationSet);
    }

 /res/anim/set_test.xml 代码实现:





 public void xmlSetAnimation(View view){
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.set_test);
        //3. 启动动画
        img_context.startAnimation(animation);
    }

  4.  帧动画 : 

1. /res/drawable/drawable_animation_test.xml  设置图片播放顺序



    

2.  设置图片播放控件:android:background


  
3.  播放帧动画、停止帧动画

 // 启动停止帧动画
   public void  imgAnimation(View view){
        AnimationDrawable animationDrawable= (AnimationDrawable) donghuaImg.getBackground();
        if(animationDrawable.isRunning()){
            animationDrawable.stop();
        }else{
            animationDrawable.start();
        }
    }

 效果图:

4. Android实现转场动画: 

实现原理图:

   实现代码逻辑:

1.  MainActivity界面功能按钮:


   // 当前界面下一个界面
    public void nextPage(View view) {
        startActivity(new Intent(MainActivity.this,SecondActivity.class));
        // 右边进来动画 right_in
        // 当前界面出去动画:left_out
 // 让动画起效果函数
        overridePendingTransition(R.anim.right_in, R.anim.left_out);
    }

/res/drawable/right_in.xml



    

/res/drawable/right_out.xml



2.  SecondActivity 关闭返回


 public void back(View view){
        finish();
        // 进来动画,右边动画进来
        // 当前界面出去
        overridePendingTransition(R.anim.left_in, R.anim.right_out);
    }

/res/drawable/left_in.xml



/res/drawable/right_out.xml



效果图:

5. 动画案例, APIDemos总demo , 点击实现EditText实现左右抖动

5.1. 布局:


  

5.2. Java 代码:


    public void back(View view){
        Animation animation = AnimationUtils.loadAnimation(this, R.anim.shake);
        et_main_name.startAnimation(animation);
    }

/res/anim/shake.xml




/res/anim/cycle_8.xml   抖动次数





作者:小置同学


阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯