zoukankan      html  css  js  c++  java
  • Android 动画

    Android 动画

    帧动画

    动画的启动和停止

    • 获取动画的 Drawable资源

      • AnimationDrawable anim = (AnimationDrawable)relativeLayout.getBackground();
        
    • //启动动画

      • anim.start();
        
    • 停止动画

      • anim.stop();
        
    • 得到frame帧布局

      • <animation-list xmlns:android="http://schemas.android.com/apk/res/android">
        
        <item android:drawable="@drawable/meinv" android:duration="120"/>
        <item android:drawable="@drawable/meinv2" android:duration="120"/>
        <item android:drawable="@drawable/meinv3" android:duration="120"/>
        <item android:drawable="@drawable/meinv4" android:duration="120"/>
        
        </animation-list>
        
    • 创建RelativeLayout 布局

      • <RelativeLayout
            android:id="@+id/rl"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:background="@drawable/frame"
            xmlns:android="http://schemas.android.com/apk/res/android" />
        
    • 设置点击开始 和 结束

      • private boolean flag;
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        
                RelativeLayout relativeLayout = findViewById(R.id.rl);
                final AnimationDrawable animationDrawable = (AnimationDrawable) relativeLayout.getBackground();
        
                relativeLayout.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
        
                        if(flag){
                            animationDrawable.start();
                        }else {
                            animationDrawable.stop();
                            flag = true;
                        }
                    }
                });
            }
        

    补间动画

    • alpha 透明度
    • ratate 旋转
    • scale 缩放
    • translate 平移

    alpha

    • 设置alpha动画

      • <alpha
            android:fromAlpha="0"
            android:toAlpha="1"
            android:duration = "2000"
            />
        
    • 设置 动画 图片

      • <ImageView
                android:id="@+id/iv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:adjustViewBounds="true"
                android:maxWidth="300dp"
                android:maxHeight="300dp"
                android:src="@drawable/meinv"/>
        
    • 设置点击事件

      • imageview = findViewById(R.id.iv);
        
        imageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 通过加载xml动画设置文件,来创建一个 Animation 对象
                Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.alpha);
                imageview.startAnimation(animation);
            }
        });
        

    rotate

    • 设置rotate布局

      • <rotate
                android:duration = "2000"
                android:fromDegrees="0"
                android:toDegrees="360"
                android:pivotX="50%"
                android:pivotY="50%"
                />
        
    • 设置点击事件

      • imageview = findViewById(R.id.iv);
        
        imageview.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // 通过加载xml动画设置文件,来创建一个 Animation 对象
                Animation animation = AnimationUtils.loadAnimation(MainActivity.this, R.anim.rotate);
                imageview.startAnimation(animation);
            }
        });
        

    scale

    • 设置scale帧

      • <scale
                android:fromXScale="1"
                android:fromYScale="1"
                android:toXScale="0.5"
                android:toYScale="0.5"
                android:pivotY="50%"
                android:pivotX="50%"
                android:duration="2000"
                />
        

    translate

    • 设置布局

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

    属性动画

    • ValueAnimator

      • 改变animator值的

      • ValueAnimator valueAnimator = ValueAnimator.ofFloat(0f,1f);
                valueAnimator.setDuration(2000);
                valueAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
                    @Override
                    public void onAnimationUpdate(ValueAnimator animation) {
                        float value = (float)animation.getAnimatedValue();
                        Log.e("leo","onAnimationUpdate" + value);
                    }
                });
                valueAnimator.start();
        
    • ObjectAnimator

      • 继承 ValueAnimator 可以直接针对对象 控制控件

      • 设置图片控件

        • <ImageView
              android:id="@+id/iv"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerInParent="true"
              android:adjustViewBounds="true"
              android:maxWidth="300dp"
              android:maxHeight="300dp"
              android:src="@drawable/meinv"/>
          
      • 设置图片渐进

        • ImageView imageView = findViewById(R.id.iv);
                  ObjectAnimator objectAnimator = ObjectAnimator.ofFloat(imageView,"alpha", 0f,1f );
                  objectAnimator.setDuration(4000);
                  objectAnimator.start();
          
    • 监听器

      • onAnimationStart() 动画开始的时候调用

      • onAnimationEnd() 动画结束的时候调用

      • onAnimationCancel() 动画被取消的时候调用

      • onAnimationRepeat() 动画重复执行的时候调用

        • ·

          objectAnimator.addListener(new Animator.AnimatorListener() {
              @Override
              public void onAnimationStart(Animator animation) {
          
              }
          
              @Override
              public void onAnimationEnd(Animator animation) {
          
              }
          
              @Override
              public void onAnimationCancel(Animator animation) {
          
              }
          
              @Override
              public void onAnimationRepeat(Animator animation) {
          
              }
          });
          
          objectAnimator.addListener(new AnimatorListenerAdapter() {
              @Override
              public void onAnimationStart(Animator animation) {
                  super.onAnimationStart(animation);
              }
          });
          
  • 相关阅读:
    【杂谈】压行技巧(压代码)
    【UVA】11464 Even Parity(枚举子集)
    【POJ】2373 Dividing the Path(单调队列优化dp)
    【POJ】2329 Nearest number
    【BZOJ】1833: [ZJOI2010] count 数字计数(数位dp)
    【BZOJ】2809: [Apio2012]dispatching(左偏树)
    【BZOJ】2342: [Shoi2011]双倍回文(Manacher)
    【BZOJ】1912: [Apio2010]patrol 巡逻(树的直径)
    【BZOJ】1911: [Apio2010]特别行动队(斜率优化dp)
    【BZOJ】1913: [Apio2010]signaling 信号覆盖(计算几何+计数)
  • 原文地址:https://www.cnblogs.com/AronJudge/p/14649088.html
Copyright © 2011-2022 走看看