«

Android 一般动画和属性动画

时间:2024-3-2 18:22     作者:韩俊     分类: Android


Android 一般动画animation和属性动画animator

package com.example.animation;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.TranslateAnimation;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }

    public void click(View view){
        Toast.makeText(this, "click", Toast.LENGTH_SHORT).show();
    } 

    public void move(View view ){
        float fromXDelta=0;
        float toXDelta=0;
        float fromYDelta=0;
        float toYDelta=200;
        TranslateAnimation animation = new TranslateAnimation(fromXDelta, toXDelta, fromYDelta, toYDelta);
        /**
         * time
         */
        animation.setDuration(1000);
        animation.setFillAfter(true);
        ImageView imageView=(ImageView)findViewById(R.id.imageView);
        imageView.startAnimation(animation);
    }

}

这是一般动画,再看属性动画

区别:一般动画变换后只是图片移动了,view的位置不变,然而属性动画view随着图片移动。

   public void move(View view ){

        ImageView imageView=(ImageView)findViewById(R.id.imageView);
        ObjectAnimator.ofFloat(imageView, "translationY", 0f,200f).setDuration(1000).start();
    }



多种动画同时进行

   public void move(View view ){

        ImageView imageView=(ImageView)findViewById(R.id.imageView);
        ObjectAnimator.ofFloat(imageView, "translationY", 0f,200f).setDuration(1000).start();
        ObjectAnimator.ofFloat(imageView, "translationX", 0f,200f).setDuration(1000).start();
        ObjectAnimator.ofFloat(imageView, "rotation", 0,360f).setDuration(1000).start();
    }

Google提供了一种更节省系统资源的多种动画同时播放

   public void move(View view ){

        ImageView imageView=(ImageView)findViewById(R.id.imageView);

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

同时Google提供了animatorset,允许多种不同动画按照用户要求播放,如使用set.palyTpgether() set.playSequentially()

   public void move(View view ){

        ImageView imageView=(ImageView)findViewById(R.id.imageView);

        ObjectAnimator animator1=ObjectAnimator.ofFloat(imageView, "rotation", 0,360f);
        ObjectAnimator animator2=ObjectAnimator.ofFloat(imageView, "translationX", 0,200f);
        ObjectAnimator animator3=ObjectAnimator.ofFloat(imageView, "translationY", 0,200f);

        AnimatorSet set=new AnimatorSet();
        //set.playTogether(animator1,animator2,animator3);
        set.playSequentially(animator1,animator2,animator3);
        set.setDuration(1000);
        set.start();
    }

标签: android

热门推荐