zoukankan      html  css  js  c++  java
  • Android-通过Java代码来实现属性动画

    Android-通过Java代码来实现属性动画


    除了能够使用定义xml文件来设置动画之外。还能够使用java代码来进行控制动画。
    示比例如以下:


    布局文件:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                    xmlns:tools="http://schemas.android.com/tools"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:paddingBottom="@dimen/activity_vertical_margin"
                    android:paddingLeft="@dimen/activity_horizontal_margin"
                    android:paddingRight="@dimen/activity_horizontal_margin"
                    android:paddingTop="@dimen/activity_vertical_margin"
                    tools:context="com.xieth.as.againanimdemo.MainActivity2"
        >
    
        <ImageView
            android:id="@+id/id_img"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="click"
            android:src="@mipmap/ic_launcher"
            />
    
        <Button
            android:id="@+id/id_btnMove"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:onClick="move"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="40dp"
            android:text="移动"
            />
    
    
    </RelativeLayout>
    

    主活动:

    package com.xieth.as.againanimdemo;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.view.animation.TranslateAnimation;
    import android.widget.ImageView;
    import android.widget.Toast;
    
    public class MainActivity2 extends AppCompatActivity {
    
        private ImageView imageView = null;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main2);
    
            imageView = (ImageView) findViewById(R.id.id_img);
        }
    
        public void click(View view) {
            Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
        }
    
        public void move(View view) {
            TranslateAnimation animation = new TranslateAnimation(0, 200, 0, 0);
            // 设置显示的时长
            animation.setDuration(1000);
            imageView.startAnimation(animation);
        }
    }
    

    设置事件
    移动

    TranslateAnimation animation = new TranslateAnimation(0, 200, 0, 0);
    // 设置显示的时长
    animation.setDuration(1000);
    imageView.startAnimation(animation);

    执行:
    这里写图片描写叙述


    这里写图片描写叙述

    ObjectAnimator.ofFloat(imageView, "translationX", 0F, 200F).setDuration(1000).start();

    执行:
    这里写图片描写叙述
    能够看见效果是一样的。


    改动一下代码:

      ObjectAnimator.ofFloat(imageView, "translationY", 0F, 200F).setDuration(1000).start();

    这次是Y方向:
    这里写图片描写叙述


    旋转

    ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F).setDuration(1000).start();

    执行:
    这里写图片描写叙述


    组合动画

     ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F).setDuration(1000).start();
              ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F).setDuration(1000).start();
              ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F).setDuration(1000).start();

    执行:
    这里写图片描写叙述
    能够看到这三个动画同一时候执行


    使用PropertyValuesHolder

     PropertyValuesHolder p1 = PropertyValuesHolder.ofFloat("rotation", 0F, 360F);
            PropertyValuesHolder p2 = PropertyValuesHolder.ofFloat("translationX", 0F, 200F);
            PropertyValuesHolder p3 = PropertyValuesHolder.ofFloat("translationY", 0F, 200F);
            ObjectAnimator.ofPropertyValuesHolder(imageView, p1, p2, p3).setDuration(1000).start();

    执行:
    这里写图片描写叙述


    使用AnimatorSet

    ObjectAnimator a1 = ObjectAnimator.ofFloat(imageView, "rotation", 0F, 360F);
    ObjectAnimator a2 = ObjectAnimator.ofFloat(imageView, "translationX", 0F, 360F);
    ObjectAnimator a3 = ObjectAnimator.ofFloat(imageView, "translationY", 0F, 360F);
    AnimatorSet set = new AnimatorSet();
    set.setDuration(1000);
    set.playTogether(a1, a2, a3);
    set.start();

    执行:
    这里写图片描写叙述
    效果一样。


    之前都是同事播放的。如今能够依照顺序来执行。

    set.playSequentially(a1, a2, a3);

    执行:
    这里写图片描写叙述

    能够看到先旋转,再向X方向移动。再向Y方向移动。


    也可这样进行顺序控制。
    先同一时候执行X和Y方向的移动,再进行旋转

    set.play(a2).with(a3);
    set.play(a1).after(a2);

    执行:
    这里写图片描写叙述


  • 相关阅读:
    深入理解JavaScript系列(27):设计模式之建造者模式
    深入理解JavaScript系列(26):设计模式之构造函数模式
    深入理解JavaScript系列(25):设计模式之单例模式
    深入理解JavaScript系列(24):JavaScript与DOM(下)
    深入理解JavaScript系列(23):JavaScript与DOM(上)——也适用于新手
    深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP
    深入理解JavaScript系列(21):S.O.L.I.D五大原则之接口隔离原则ISP
    深入理解JavaScript系列(20):《你真懂JavaScript吗?》答案详解
    深入理解JavaScript系列(19):求值策略(Evaluation strategy)
    深入理解JavaScript系列(18):面向对象编程之ECMAScript实现(推荐)
  • 原文地址:https://www.cnblogs.com/llguanli/p/7270313.html
Copyright © 2011-2022 走看看