Android Property Animator(プロパティアニメーション)第2編


Android Property Animator(プロパティアニメーション)の第1編では、Property Animatorがアニメーションを実現する基本的な流れを知った.この記事では、レイアウトアニメーションと簡単なアニメーション効果について説明します.
1、xmlファイルを使用して属性アニメーションを作成する方法
ViewAnimator、Drawable Animatorはres/animフォルダの下でアニメーションを作成できることはよく知られています.では、Property Animatorは、まずresフォルダにanimatorフォルダを作成し、animatorフォルダの下に自分のxmlファイルを作成することをファイルに明記することもできます.例えばres/animator/scale_anim.xml
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" android:duration="2000" android:propertyName="rotationX" android:valueFrom="0.0" android:valueTo="360.0" android:valueType="floatType"></objectAnimator>
Activityで呼び出すだけです.
    public void bntXml(View v) {
        Animator animator = AnimatorInflater.loadAnimator(this, R.animator.scale_anim);
        animator.setTarget(ivFace);
        animator.start();
    }

では、単純なアニメだけを支持していると思いますか?もし私がどれだけアニメーションを必要としたら?
<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android" android:ordering="together">

    <objectAnimator  android:duration="2000" android:propertyName="rotationX" android:valueFrom="0.0" android:valueTo="360.0" android:valueType="floatType"></objectAnimator>

    <objectAnimator  android:duration="2000" android:propertyName="scaleX" android:valueFrom="1.0" android:valueTo="2.0" android:valueType="floatType"></objectAnimator>

    <objectAnimator  android:duration="2000" android:propertyName="scaleY" android:valueFrom="1.0" android:valueTo="2.0" android:valueType="floatType"></objectAnimator>

</set>

setラベルを使用すると、android:orderingの属性値がtogetherで一緒に動くことを示し、値がsequentiallyで前後順に動くことを示すこともできる.
効果図を見てみましょう.
Layout Animations(レイアウトアニメーション)
主にLayoutAnimationを使用してレイアウトのコンテナをアニメートし、コンテナ内のビュー階層が変化すると遷移するアニメーション効果があります.
使用する前に、LayoutAnimationのタイプについて説明します.
LayoutTransition.APPEARING:ビューグループに表示されるビューのアニメーション
LayoutTransition.CHANGE_APPEARING:ビューグループに表示されるビューは、ビューグループ内の他のビューの位置に影響を与え、他のビューのアニメーション
LayoutTransition.DISAPPEARING:ViewがView Groupで消え、そのViewのアニメーション
LayoutTransition.CHANGE_DISAPPEARING:1つのViewがView Groupで消失し、そのViewがそのView Groupの他のView位置に影響を与え、他のViewのアニメーション
ここでは、太字の意味を重点的に区別します.レイアウトファイルを具体的に見てみましょう.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent">

    <Button  android:id="@+id/bntXml" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="bntXml" android:text="xml  " android:textColor="#ffffff" />

    <Button  android:id="@+id/bntAdd" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@+id/bntXml" android:onClick="bntAdd" android:text="addBtn  " android:textColor="#ffffff" />

    <GridLayout  android:id="@+id/gridLayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/bntXml" android:columnCount="5"></GridLayout>

    <ImageView  android:id="@+id/ivFace" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:src="@mipmap/face" />

</RelativeLayout>

Activityコード:
package com.github.ws.animationdemo;

import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.LayoutTransition;
import android.animation.ObjectAnimator;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.GridLayout;
import android.widget.ImageView;

/** * Created by Administrator on 4/6 0006. */
public class XmlAnimatorActivity extends Activity {

    private ImageView ivFace;
    private GridLayout gridLayout;
    private LayoutTransition transition;
    private int count = 0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.xml_anim);
        ivFace = (ImageView) findViewById(R.id.ivFace);
        gridLayout = (GridLayout) findViewById(R.id.gridLayout);

        transition = new LayoutTransition();
        transition.setAnimator(LayoutTransition.APPEARING, ObjectAnimator.ofFloat(gridLayout, "scaleX", 0.0f, 1.0f));
        transition.setDuration(1000);
        gridLayout.setLayoutTransition(transition);
    }

    void bntAdd(View view) {
        Button btn = new Button(this);
        btn.setText(""+count++);
        gridLayout.addView(btn,Math.min(1, gridLayout.getChildCount()));
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                gridLayout.removeView(view);
            }
        });
    }

    public void bntXml(View v) {
        Animator animator = AnimatorInflater.loadAnimator(this, R.animator.more_anim);
        animator.setTarget(ivFace);
        animator.start();
    }
}

効果図:
属性アニメーションは簡単に実現できるのではないでしょうか.あなたもやってみてください.効果はきっと素晴らしいです.属性アニメーションの第2編と第1編はすべていくつかの基礎知識で、あなたが興味を持っていくつかの比較的に風を引くことに興味があれば、きらびやかなアニメーション、私たちは一緒に研究することができます.
何か質問がありましたら、どこが間違っているのか、ご指摘ください.