精华内容
下载资源
问答
  • 项目中遇到的问题:  做

    项目中遇到的问题:

    需求: 做一个聊天页面,要求播放语音时,有一个类似于喇叭的动画,从小到大不停循环,语音播放完,动画停止在第一帧。当点击正在播放的语音时,语音停止,动画回复到第一帧(回复到第一帧是难点)

    实现:用Frame Animation  

    可以在Java代码中添加每一帧的动画,也可以创建动画布局,我用的是创建动画布局。

    1.创建动画布局,在drawable文件夹下创建布局imv_anim_bg.xml(名字自己定义):

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
        android:oneshot="false">
        <item android:drawable="@drawable/communicaiton_sound_self_03" android:duration="500"/>
        <item android:drawable="@drawable/communicaiton_sound_self_01" android:duration="500"/>
    	<item android:drawable="@drawable/communicaiton_sound_self_02" android:duration="500"/>
    	<item android:drawable="@drawable/communicaiton_sound_self_03" android:duration="500"/>
    </animation-list>

    解释一下:android:oneshot="false"     false:循环播放动画,   true:  只播放一次

    2.在布局中添加ImageView控件,设置其背景为上述动画。

    3.在java代码中实现动画的播放,停止,回复第一帧:

         获得动画实例;     

    anim = (AnimationDrawable) imv.getBackground();  // anim 为AnimationDrawable对象,imv为ImageView对象,就是要实现动画效果的ImageView
         获取动画实例后就可以实现动画播放,停止等操作

         动画播放:

    anim.start();
         动画停止:

    anim.stop();    // stop方法实际上只是动画的暂停方法,当调用此方法时,动画会停止到当前正在播放的那一帧,并不会停止到第一帧,当在此方法之后调用start()方法,会继续下一帧播放

        动画恢复到第一帧动画:

            anim.selectDrawable(0);      //选择当前动画的第一帧,然后停止
            anim.stop();    

    讨论:

    动画恢复到第一帧:

       在项目是现实时,刚开始用的方法是anim.setVisible(true,true);  查看文档发现,setVisible方法的第二个参数是reset,因此设置其为true,目的是实现anim的重置,此方法可用,但是在之后的测试中发现在Lenovo等手机中,系统并不支持此方法。

    在之后的调查中发现上述返回第一帧的方法,目前没有发现不支持此方法的手机


    展开全文
  • >Android中常用的动画都在这里了,包含了基本的动画【透明度动画,缩放动画,旋转动画,位移动画】;还有就是这四种动画的组合实现; 还有布局动画,就是在加载布局时的动画;还有Activity跳转的动画

    转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53068940 【DylanAndroid的博客】


    Android中常用的动画都在这里了,包含了基本的动画【透明度动画,缩放动画,旋转动画,位移动画】;还有就是这四种动画的组合实现;
    还有布局动画,就是在加载布局时的动画;还有Activity跳转的动画。
    效果图如下:

    效果图

    1. Android基础动画

    • 透明度动画
     <?xml version="1.0" encoding="utf-8"?>
     <set xmlns:android="http://schemas.android.com/apk/res/android">
         <alpha
             android:duration="1000"
             android:fromAlpha="0.0"
             android:toAlpha="1.0"
             />
     </set>
       /**
        * 第一个参数fromAlpha为 动画开始时候透明度
        *第二个参数toAlpha为 动画结束时候透明度
         */
         Animation animation = new AlphaAnimation(0, 1);
         animation.setDuration(1000);
        v.startAnimation(animation);
    • 缩放动画
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <scale
            android:duration="1000"
            android:fromXScale="0"
            android:fromYScale="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1"
            android:toYScale="1" />
    </set>
     /**
     * 第一个参数fromX为动画起始时 X坐标上的伸缩尺寸
     * 第二个参数toX为动画结束时 X坐标上的伸缩尺寸
     * 第三个参数fromY为动画起始时Y坐标上的伸缩尺寸
     * 第四个参数toY为动画结束时Y坐标上的伸缩尺寸
     * 说明: 0.0表示收缩到没有;1.0表示正常无伸缩;值小于1.0表示收缩;值大于1.
     * 第五个参数pivotXType为动画在X轴相对于物件位置类型
     * 第六个参数pivotXValue为动画相对于物件的X坐标的开始位置
     * 第七个参数pivotXType为动画在Y轴相对于物件位置类型
     * 第八个参数pivotYValue为动画相对于物件的Y坐标的开始位置
     */
    Animation animation = new ScaleAnimation(0, 1
    animation.setDuration(1000);
    iv.startAnimation(animation);
    • 旋转动画
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <rotate
            android:duration="1000"
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="360" />
    </set>
        /**
         * 第一个参数fromDegrees为动画起始时角度
         * 第二个参数toDegrees为动画结束角度
         * 第三个参数pivotXType为动画在X轴相对于物件位置类型
         * 第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
         * 第五个参数pivotXType为动画在Y轴相对于物件位置类型
         * 第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
         */
        Animation animation = new RotateAnima
        animation.setDuration(1000);
        iv.startAnimation(animation);
    • 位移动画
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate
            android:duration="2000"
            android:fromXDelta="0"
            android:fromYDelta="0"
            android:toXDelta="500"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toYDelta="0" />
    </set>
        /**
         * 第一个参数fromDegrees为动画起始时角度
         * 第二个参数toDegrees为动画结束角度
         * 第三个参数pivotXType为动画在X轴相对于物件位置类型
         * 第四个参数pivotXValue为动画相对于物件的X坐标的开始位置
         * 第五个参数pivotXType为动画在Y轴相对于物件位置类型
         * 第六个参数pivotYValue为动画相对于物件的Y坐标的开始位置
         */
         Animation animation = new RotateAnima
         animation.setDuration(1000);
         iv.startAnimation(animation);
         /**
          * 第一个参数fromXDelta为动画起始时的x坐标
          * 第二个参数toXDelta为动画结束时的x坐标
          * 第三个参数fromYDelta为动画起始时的y坐标
          * 第四个参数toYDelta为动画结束时的y坐标
          */
          Animation animation = new Translat
          animation.setDuration(2000);
          /**设置插值器:先加速,后减速**/
          animation.setInterpolator(new Acce
          iv.startAnimation(animation);

    2.组合动画

    • 先播放缩放动画,完成后播放旋转动画

      Animation animation = AnimationUtils.loadAnimation(this, R.anim.scale);
                  iv.startAnimation(animation);
                  final Animation animation2 = AnimationUtils.loadAnimation(this, R.anim.rotate);
                  animation.setAnimationListener(new Animation.AnimationListener() {
                      @Override
                      public void onAnimationStart(Animation animation) {
      
                      }
      
                      @Override
                      public void onAnimationEnd(Animation animation) {
      
                          iv.startAnimation(animation2);
                      }
      
                      @Override
                      public void onAnimationRepeat(Animation animation) {
      
                      }
                  });
    • 先播放旋转动画,完成后播放位移动画,在xml中设置第二个动画执行的等待时间

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
    
        <rotate
            android:duration="1000"
            android:fromDegrees="0"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toDegrees="360" />
        <translate
            android:duration="1000"
            android:fromXDelta="0"
            android:fromYDelta="0"
            android:toXDelta="500"
            android:startOffset="1000"
            android:interpolator="@android:anim/accelerate_interpolator"
            android:toYDelta="0" />
    </set>
    • 重复的透明度动画-闪烁
    AlphaAnimation alphaAnimation = new AlphaAnimation(0.1f, 1.0f);
                    alphaAnimation.setDuration(1000);
                    alphaAnimation.setRepeatCount(10);
                    /**倒序重复REVERSE  正序重复RESTART**/
                    alphaAnimation.setRepeatMode(Animation.REVERSE);
                    iv.startAnimation(alphaAnimation);
    • 重复的位移动画-抖动
     Animation translateAnimation = new TranslateAnimation(-10, 10, 0, 0);
                    translateAnimation.setDuration(100);
                    translateAnimation.setRepeatCount(10);
                    /**倒序重复REVERSE  正序重复RESTART**/
                    translateAnimation.setRepeatMode(Animation.REVERSE);
                    iv.startAnimation(translateAnimation);

    3.帧动画

    • 在drawable文件夹下建立文件

      “`xml

    4.布局动画

    这是一个ListView的加载布局动画
    • 先建立动画文件,从透明到不透明并且大小从0到原大小
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator" >
    
        <scale
            android:duration="1000"
            android:fromXScale="0.1"
            android:fromYScale="0.1"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1.0"
            android:toYScale="1.0" />
        <alpha
            android:duration="1000"
            android:fromAlpha="0"
            android:toAlpha="1.0" />
    </set>
    • 在activity中的用法
     ListView listView = (ListView) findViewById(R.id.listview);
            List<String> datas = new ArrayList<>();
            for (int i = 0; i < 18; i++) {
                datas.add("万能适配器测试" + i);
            }
            LayoutAnimationController layoutAnimationController= new        LayoutAnimationController(AnimationUtils.loadAnimation(this, R.anim.zoom_in));
            layoutAnimationController.setOrder(LayoutAnimationController.ORDER_NORMAL);
            listView.setLayoutAnimation(layoutAnimationController);
            listView.setAdapter(new CommonAdapter<String>(this, datas, R.layout.item) {
    
                @Override
                protected void convertView(View item, String s) {
                    TextView textView = CommonViewHolder.get(item, R.id.textView);
                    textView.setText(s);
                }
            });

    5.Activity跳转动画

    • 退出动画:从不透明到透明并且大小从原大小到0
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator"
        android:zAdjustment="top" >
    
        <scale
            android:duration="@android:integer/config_mediumAnimTime"
            android:fromXScale="1.0"
            android:fromYScale="1.0"
            android:pivotX="50%p"
            android:pivotY="50%p"
            android:toXScale="0.1"
            android:toYScale="0.1" />
    
        <alpha
            android:duration="@android:integer/config_mediumAnimTime"
            android:fromAlpha="1.0"
            android:toAlpha="0" />
    
    </set>
    • 进入动画:从透明到不透明并且大小从0到原大小
    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:interpolator="@android:anim/decelerate_interpolator" >
    
        <scale
            android:duration="1000"
            android:fromXScale="0.1"
            android:fromYScale="0.1"
            android:pivotX="50%"
            android:pivotY="50%"
            android:toXScale="1.0"
            android:toYScale="1.0" />
        <alpha
            android:duration="1000"
            android:fromAlpha="0"
            android:toAlpha="1.0" />
    </set>
    • 在Activity中的用法
      startActivity(new Intent(this,SecondActivity.class));
                    overridePendingTransition(R.anim.zoom_in,R.anim.zoom_out);

    6.GitHub

    展开全文
  • Android动画之帧动画

    千次阅读 2019-08-08 09:47:07
    帧动画的原理就是让系列的静态图片依次播放,实现动画效果。 下面了解一下两种实现帧动画的方式 1.利用 Java 代码实现帧动画 2.利用 xml 实现帧动画(开发中通常使用这种方法实现帧动画) 1.利用 Java 代码实现...

    帧动画的原理就是让一系列的静态图片依次播放,实现动画效果。
    下面了解一下两种实现帧动画的方式

    1.利用 Java 代码实现帧动画
    2.利用 xml 实现帧动画(开发中通常使用这种方法实现帧动画)

    1.利用 Java 代码实现帧动画
    在这里插入图片描述
    源代码如下:
    activity_main.xml

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
        <Button
            android:id="@+id/btn_start"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="开启" />
    
        <Button
            android:id="@+id/btn_stop"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="停止" />
    
        <ImageView
            android:id="@+id/iv_animation"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" />
    
    </LinearLayout>
    

    MainActivity.java文件如下

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
    
        AnimationDrawable animationDrawable;
        private Button btn_start;
        private Button btn_stop;
        private ImageView iv_animation;//java的形式实现
    
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
    
        }
    
        private void initView() {
            btn_start = (Button) findViewById(R.id.btn_start);
            btn_stop = (Button) findViewById(R.id.btn_stop);
            iv_animation = (ImageView) findViewById(R.id.iv_animation);
    
            btn_start.setOnClickListener(this);
            btn_stop.setOnClickListener(this);
    
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.btn_start:
                    //1.实现帧动画的类(相当于一本空白的小人书)
                    animationDrawable = new AnimationDrawable();
                    //2.为帧动画添加内容(在小人书里添加内容)
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim1)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim2)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim3)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim4)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim5)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim6)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim7)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim8)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim9)), 100);
                    animationDrawable.addFrame(new BitmapDrawable(getResources(), BitmapFactory.decodeResource(getResources(), R.drawable.anim10)), 100);
                    //3.将帧动画设置给View做背景
                    iv_animation.setBackground(animationDrawable);
                    //其他操作,如,设置只执行一次
                    animationDrawable.setOneShot(true);
                    //4.开启动画(相当于翻书)
                    animationDrawable.start();
                    break;
                case R.id.btn_stop:
                    //停止动画
                    animationDrawable.stop();
                    break;
            }
        }
    }
    

    2.利用 xml 实现帧动画(开发中通常使用这种方法实现帧动画)
    以前还在学校的时候写过一个例子Android中帧动画的简单实现
    下面再来一次
    (1).帧动画通常在XML 资源进行定义,在 <animation-list …/> 标签下使用 <item …/> 子元素标签定义动画的全部帧,并指定各帧的持续时间。
    在这里插入图片描述
    2、布局中将 AnimationDrawable 对象直接作为背景
    在这里插入图片描述
    3.在Activity文件中进行操作(播放,停止)
    在这里插入图片描述

    展开全文
  • 本文将详细介绍 Android 动画中 逐帧动画的原理 & 使用 关于Android 动画的系列文章:动画的使用,请参考文章: Android 属性动画:这是篇很详细的 属性动画 总结&攻略 Android 动画:手把手教你使用 补间

    前言

    • 动画的使用 是 Android 开发中常用的知识

    • 可是动画的种类繁多、使用复杂,每当需要 采用自定义动画 实现 复杂的动画效果时,很多开发者就显得束手无策

    • 本文将详细介绍 Android 动画中 逐帧动画的原理 & 使用
      动画类型

    • 关于Android 动画的系列文章:

    1. 动画的使用,请参考文章:
      Android 属性动画:这是一篇很详细的 属性动画 总结&攻略
      Android 动画:手把手教你使用 补间动画
      Android 动画:你真的会使用插值器与估值器吗?(含详细实例教学)
    2. 自定义View的原理,请参考文章:
      (1)自定义View基础 - 最易懂的自定义View原理系列
      (2)自定义View Measure过程 - 最易懂的自定义View原理系列
      (3)自定义View Layout过程 - 最易懂的自定义View原理系列
      (4)自定义View Draw过程- 最易懂的自定义View原理系列
    3. 自定义View的应用,请参考文章:
      手把手教你写一个完整的自定义View
      Path类的最全面详解 - 自定义View应用系列
      Canvas类的最全面详解 - 自定义View应用系列
      为什么你的自定义View wrap_content不起作用?

    目录

    目录


    1. 作用对象

    视图控件(View

    1. AndroidTextView、Button等等
    2. 不可作用于View组件的属性,如:颜色、背景、长度等等

    2. 原理

    • 将动画拆分为 帧 的形式,且定义每一帧 = 每一张图片
    • 逐帧动画的本质:按序播放一组预先定义好的图片

    3. 具体使用

    步骤1:将动画资源(即每张图片资源)放到 drawable文件夹里

    技巧:

    1. 找到自己需要的gif动画
    2. gif分解软件(如 GifSplitter)将 gif 分解成一张张图片即可

    效果图

    步骤2:设置 & 启动 动画

    设置 & 启动 逐帧动画有两种方式:在XML / Java代码。

    方式1:XML实现
    • 步骤1:在 res/anim的文件夹里创建动画效果.xml文件

    此处路径为res/anim/knight_attack.xml

    • 步骤2:设置动画资源(图片资源)

    knight_attack.xml

    <?xml version="1.0" encoding="utf-8"?>
    <animation-list
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:oneshot="true" // 设置是否只播放一次,默认为false
        >
    
    // item = 动画图片资源;duration = 设置一帧持续时间(ms)
        <item android:drawable="@drawable/a0" android:duration="100"/>
        <item android:drawable="@drawable/a1" android:duration="100"/>
        <item android:drawable="@drawable/a2" android:duration="100"/>
        <item android:drawable="@drawable/a3" android:duration="100"/>
        <item android:drawable="@drawable/a4" android:duration="100"/>
        <item android:drawable="@drawable/a5" android:duration="100"/>
        <item android:drawable="@drawable/a6" android:duration="100"/>
        <item android:drawable="@drawable/a7" android:duration="100"/>
        <item android:drawable="@drawable/a8" android:duration="100"/>
        <item android:drawable="@drawable/a9" android:duration="100"/>
        <item android:drawable="@drawable/a10" android:duration="100"/>
        <item android:drawable="@drawable/a11" android:duration="100"/>
        <item android:drawable="@drawable/a12" android:duration="100"/>
        <item android:drawable="@drawable/a13" android:duration="100"/>
        <item android:drawable="@drawable/a14" android:duration="100"/>
        <item android:drawable="@drawable/a15" android:duration="100"/>
        <item android:drawable="@drawable/a16" android:duration="100"/>
        <item android:drawable="@drawable/a17" android:duration="100"/>
        <item android:drawable="@drawable/a18" android:duration="100"/>
        <item android:drawable="@drawable/a19" android:duration="100"/>
        <item android:drawable="@drawable/a20" android:duration="100"/>
        <item android:drawable="@drawable/a21" android:duration="100"/>
        <item android:drawable="@drawable/a22" android:duration="100"/>
        <item android:drawable="@drawable/a23" android:duration="100"/>
        <item android:drawable="@drawable/a24" android:duration="100"/>
        <item android:drawable="@drawable/a25" android:duration="100"/>
    </animation-list>
    
    • 步骤3:在Java代码中载入 & 启动动画
    
    public class FrameActivity extends AppCompatActivity {
        private Button btn_startFrame,btn_stopFrame;
        private ImageView iv;
        private AnimationDrawable animationDrawable;
    
            iv = (ImageView) findViewById(R.id.iv);
            btn_startFrame = (Button) findViewById(R.id.btn_startFrame);
            btn_stopFrame = (Button) findViewById(R.id.btn_stopFrame);
    
    
            <-- 开始动画 -->
            btn_startFrame.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    iv.setImageResource(R.drawable.knight_attack);
                    // 1. 设置动画
                    animationDrawable = (AnimationDrawable) iv.getDrawable();
                    // 2. 获取动画对象
                    animationDrawable.start();
                    // 3. 启动动画
                }
            });
            //停止动画
            btn_stopFrame.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    
                    iv.setImageResource(R.drawable.knight_attack);
                    // 1. 设置动画
                    animationDrawable = (AnimationDrawable) iv.getDrawable();
                    // 2. 获取动画对象
                    animationDrawable.stop();
                    // 3. 暂停动画
                }
            });
    
        }
    }
    

    方式2:在Java代码中实现

            <-- 直接从drawable文件夹获取动画资源(图片) -->
            animationDrawable = new AnimationDrawable();
            for (int i = 0; i <= 25; i++) {
                int id = getResources().getIdentifier("a" + i, "drawable", getPackageName());
                Drawable drawable = getResources().getDrawable(id);
                animationDrawable.addFrame(drawable, 100);
            }
    
            <-- 开始动画 -->
            btn_startFrame.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    animationDrawable.setOneShot(true);
                    iv.setImageDrawable(animationDrawable);
                    // 获取资源对象
                    animationDrawable.stop();
                     // 特别注意:在动画start()之前要先stop(),不然在第一次动画之后会停在最后一帧,这样动画就只会触发一次
                    animationDrawable.start();
                    // 启动动画
                   
                }
            });
    
             <-- 停止动画 -->
            btn_stopFrame.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    animationDrawable.setOneShot(true);
                    iv.setImageDrawable(animationDrawable);
                    animationDrawable.stop();
                }
            });
    
    

    效果图

    效果图


    4. 特点

    • 优点:使用简单、方便
    • 缺点:容易引起 OOM,因为会使用大量 & 尺寸较大的图片资源

    尽量避免使用尺寸较大的图片


    5. 应用场景

    较为复杂的个性化动画效果。

    使用时一定要避免使用尺寸较大的图片,否则会引起OOM


    6. 总结

    • 本文对Android 动画中的 逐帧动画 进行了详细分析
    • 关于Android 动画的系列文章:
    1. 动画的使用,请参考文章:
      Android 属性动画:这是一篇很详细的 属性动画 总结&攻略
      Android 动画:手把手教你使用 补间动画
      Android 动画:你真的会使用插值器与估值器吗?(含详细实例教学)
    2. 自定义View的原理,请参考文章:
      (1)自定义View基础 - 最易懂的自定义View原理系列
      (2)自定义View Measure过程 - 最易懂的自定义View原理系列
      (3)自定义View Layout过程 - 最易懂的自定义View原理系列
      (4)自定义View Draw过程- 最易懂的自定义View原理系列
    3. 自定义View的应用,请参考文章:
      手把手教你写一个完整的自定义View
      Path类的最全面详解 - 自定义View应用系列
      Canvas类的最全面详解 - 自定义View应用系列
      为什么你的自定义View wrap_content不起作用?
    • 接下来,我我将继续对**Android 动画进行分析,感兴趣的同学可以继续关注carson_ho的微信公众号**
      示意图
      示意图

    帮顶 / 评论点赞!因为你们的赞同/鼓励是我写作的最大动力!

    展开全文
  • //画一个背景 ctx0.drawImage(that.data.bg, 0, 0, width, height); ctx0.draw() // animationFrame.doAnimationFrame,e为回调执行时间 var rander = function(e) { e = e ? e : nowtime ctx.clearRect(0, 0...
  • Android 动画之帧动画

    万次阅读 2018-06-07 11:34:29
    帧动画非常容易理解,其实就是简单的由N张静态图片收集起来,然后我们通过控制依次显示这些图片,因为人眼"视觉残留"的原因,会让我们造成动画的"错觉",跟放电影的原理一样。   而Android中...
  • unity3d 导入动画一帧切问题

    千次阅读 2017-08-22 11:14:31
    比如有些地方用一帧切过去,u3d里看起来里面就好像还有很多帧 看起来更平滑,就好象u3d自己插值了 其实unity并没有插值,而是maya导出fbx的时候动画上没有把帧改成step tangents模式 红色的轴中间就是step ...
  • 该实现很简单,只有几行代码 // 获取当前播放的动画 let curAniClip = ... // 从第一帧开始播放动画 animation.play(curAniClip.name, 0); // 采样第一帧状态 animation.sample(curAniClip.name); ...
  • 今天在手机上试了试这个 css3 动画效果,可以把动画效果停留在最后一帧上,以及鼠标 :hover 暂停动画,比较实用的功能,不用 JS 也能实现这些效果了。不过测试体验感觉手机上没有 jQuery 的animate 动画流畅,比较卡...
  • 帧动画就是顺序播放组预先定义好的图片,就类似于我们观看视频,就是一张一张的图片连续播放。 帧动画的使用很简单,总共就两个步骤: 1、在res/drawable目录下定义个XML文件,根节点为系统提供的animation-...
  • 这篇文章不会教大家如何实现个具体的动画效果,我会从动画的本质出发,来说说 iOS 动画的原理与实现方式。 什么是动画 动画,顾名思义,就是能“动”的。 人的眼睛对图像有短暂的记忆效应,所以当眼睛看到多...
  • Android动画 - AnimationDrawable帧动画

    千次阅读 2016-06-07 15:55:34
    类似于电影一样,一帧一帧的播放图片 同样,创建AnimationDrawable有两种方式 XML文件+Java代码 Java代码方式 不同于之前的ViewAnimation,之前的动画xml文件存放位置是:res/anim/xxx.xml 而AnimationDrawable...
  • 前段时间太忙了,已经好久没发博客了,好多想写的东西都没时间写,想了想,这个星期就抽时间写个动画...逐帧动画是通过一张一张的图片,切换形成的动画,就类似与我们看的胶片电影一样,逐帧动画最简单的使用就是在
  • 视图动画和帧动画

    万次阅读 2015-05-25 16:50:00
    转载请注明出处:http://blog.csdn.net/ZhouLi_CSDN/article/details/45971421View Animaiton 通常使用xml文件定义动画,这样易读,重用。 xml写在res/anim/路径下。 下面是例子: android:inte
  • Android动画之逐帧动画FrameAnimation

    千次阅读 2018-12-28 11:04:42
    1 逐帧动画介绍 视图动画由两部分组成,补间动画和逐帧动画,前面文章已经讲解了补间动画,下面讲解逐帧动画。 Frame-by-frame Animation主要作用于view,可以利用xml或者代码生成动画,如果使用xml方式生成动画...
  • Android 动画之帧动画用法详解

    万次阅读 2020-04-21 23:24:50
    本文目录帧动画概念帧动画实现方法1:xml实现帧动画步:导入帧动画素材第二步:创建帧动画文件第三步:布局文件和Activity方法2:用Java代码实现帧动画 帧动画概念 在Android中,帧动画的本质是把组预先准备好...
  • Android提供三种形式动画:视图动画,帧动画,属性动画。其中属性动画的功能最强大,在Android 3.0中开始引入。本文介绍视图动画和帧动画的使用技巧。 1 视图动画(View Animation) Android的视图动画可以完成...
  • android动画系列()逐帧动画

    千次阅读 2018-10-19 17:37:55
    帧动画,我的理解就是将一帧帧的静态图片进行有序的展示,利用人眼的视觉暂留现象来呈现给用户一种连贯的动画效果。在实际编写代码过程中,我们主要是通过系统提供的AnimationDrawable类来控制逐帧动画
  • css3动画停留在最后一帧

    万次阅读 2017-12-07 23:03:53
    想要让css动画停留在最后一帧,可以直接添加animation-fill-mode: forwards;附上w3c文档链接 http://www.w3school.com.cn/cssref/pr_animation-fill-mode.asp
  • 博主声明: 转载请在开头附加本文链接及作者信息,并... Android 提供了一种简单而好用的帧动画,所谓帧动画,就是一帧一帧的播放,你可以想象一下民国时期那种电影片的效果,它用的就是一帧一帧的播放,说白了就是...
  • 动画中的关键帧动画的原理

    千次阅读 2019-03-03 02:20:07
    本文转载自博主”早上吃什么“《动画中的关键帧动画的原理》一文。 想一想如果制作动画,如果没有关键帧这种技术会是多么恐怖,如果动画帧率为25,即每秒要播放25张画面,假设现在要制作1秒的动画,那么就需要手动...
  • 这篇文章接下来介绍Animation另种动画形式:Frame逐帧动画。 Frame动画是系列图片按照一定的顺序展示的过程,和放电影的机制很相似,我们称为逐帧动画。Frame动画可以被定义在XML文件中,也可以完全编码实现...
  • 帧动画详解

    千次阅读 2016-08-30 20:36:45
    概述 逐帧动画(Frame Animation),是通过将一系列图片按照一定的顺序展示实现的动画。同是视图动画(View Animation),在使用时比补间动画(Tween ...:代表一帧动画。 属性介绍: android:oneshot:若等
  • Android之帧动画与补间动画的使用

    千次阅读 2015-08-14 15:23:34
    前言   在日常开发中,我们有时候需要一些好看的动画效果,这时可以充分利用Android提供的这几种动画来实现, ...逐帧动画:传统的基于单元格的动画,每一帧显示一个不同的Drawable。逐帧动画可以在一...
  • 今天在模拟右侧栏向左滑出时,发现动画只会起作用次,最后解决了~如下图解决思路是:动态添加class。css.moveAnimation{ animation:mymove 1s; } @keyframes mymove /*Safari and Chrome*/ { from {right:-400...
  • Android动画——逐帧动画

    千次阅读 2016-08-30 13:27:48
    1、概述 Android提供了几种动画类型:View Animation 、Drawable Animation 、Property ...Drawable Animation分为逐帧动画和补间动画。Property Animation的功能可以说是最强大的(从某种角度看,属性动画是补间动画的
  • 【maya】关键帧动画-动画层的使用

    千次阅读 2019-05-05 17:50:42
    设置关键比较简单,这里我们需要使用的是动作捕捉数据,关键很多,单独处理起来很麻烦。于是我们开始引用动画层。 动画层在右边通道盒/层编辑器里,下方标签为动画。...注意每个组件(在人物动作动画中...
  • 程序功能,点击按钮时,图片一张一张循环播放: 直接来代码: ... //动画播放 ...其中每一个item就是一帧的资源,android:drawable是图片资源,android:duration是每一帧的显示时间。
  • 动画创建的帧动画,就是补间动画的创建,要用要个annimition-list 的 xml 文件用于作为 IMageView 控件的背景(注意是背景 background属性),(资源可向留下邮箱)类似这样个动画 首先写个 ImageView 的布局...
  • egret帧动画

    千次阅读 2016-07-28 11:30:40
    、使用白鹭官方工具TextureMerger制作帧动画文件: 选择MovieClip进行制作完成后导出得到个.png和个.json文件。 二、导入使用: 白鹭帧动画控制无法是那几个API,不懂得童鞋请看API和代码注释;以下是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 99,993
精华内容 39,997
关键字:

一帧一帧画动画的手机软件