zoukankan      html  css  js  c++  java
  • 25属性动画

    • 属性动画是建立在补间动画之上
    • 当A图从X移动Y时 A图的属性也会跟着变化 并且有对应的监听方法 也就是说当A图从X到Y时 你可以点击Y地区触发A图的点击方法

    • 代码创建属性动画:

      • 创建实例类 : ObjectAnimator rotateAnimator = ObjectAnimator.ofFloat(控件id,动画类型,可变的浮点类型);
      • 设置播放动画时间 : rotateAnimator.setDuration(5000);
      • 开始播放 : rotateAnimator.start();
    • xml属性动画:
      • 在res创建文件夹animator创建相应的动画
       Animator animator = AnimatorInflater.loadAnimator(上下文,动画文件id);
                    animator.setTarget(iv);//设置操作对象
                    animator.start();

    案例结构
    这里写图片描述

    xml_object.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android"
        android:ordering="sequentially"
        >
    
        <objectAnimator
            android:propertyName="scaleY"
            android:valueFrom="1"
            android:valueTo="3"
            android:duration="3000"
            ></objectAnimator>
    
        <set
            android:ordering="together"
            >
            <objectAnimator
                android:propertyName="translationX"
                android:valueFrom="0"
                android:valueTo="200"
                android:duration="3000"
                ></objectAnimator>
    
            <objectAnimator
                android:propertyName="translationY"
                android:valueFrom="0"
                android:valueTo="500"
                android:duration="3000"
                ></objectAnimator>
    
        </set>
    
    </set>

    background_object.xml

    <?xml version="1.0" encoding="utf-8"?>
    <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
        android:propertyName="backgroundColor"
        android:duration="5000"
        android:valueFrom="#ff0000"
        android:valueTo="#0000ff"
        android:valueType="intType"
        >
    
    </objectAnimator>

    MainActivity.java

    package com.qf.sxy.propertyanimation;
    
    import android.animation.Animator;
    import android.animation.AnimatorInflater;
    import android.animation.AnimatorSet;
    import android.animation.ObjectAnimator;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.widget.ImageView;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class MainActivity extends AppCompatActivity {
    
    
        private ImageView iv;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            iv = ((ImageView) findViewById(R.id.iv));
    
        }
    
    
        public void MyClick(View view) {
            switch (view.getId()){
                case R.id.btn_alpha:
                    /**
                     * 获取属性动画
                     * 参数1:执行动画的对象
                     * 参数2:动画的属性名
                     * 参数3:可变参数  执行动画的值
                     */
                    ObjectAnimator alphaAnimator = ObjectAnimator.ofFloat(iv,"alpha",1.0f,0.0f);
                    alphaAnimator.setDuration(5000);
                    //对动画进行监听
                    alphaAnimator.addListener(new Animator.AnimatorListener() {
                        @Override
                        public void onAnimationStart(Animator animation) {
                            //动画开始的时候
                            Log.e("AAA","=Start=>");
                        }
    
                        @Override
                        public void onAnimationEnd(Animator animation) {
                            //动画结束的时候
                            Log.e("AAA","=END=>");
    
                        }
    
                        @Override
                        public void onAnimationCancel(Animator animation) {
                            //动画取消的时候
                            Log.e("AAA","=Cancel=>");
                            //   alphaAnimator.cancel();调用此方法取消动画调用
                        }
    
                        @Override
                        public void onAnimationRepeat(Animator animation) {
                            //动画重复时候
                            Log.e("AAA","=Repeat=>");
                        }
                    });
                    alphaAnimator.start();//启动动画
                    break;
                case R.id.btn_rotate:
                    ObjectAnimator rotateAnimator = ObjectAnimator.ofFloat(iv,"rotation",0,-360,720);
                    rotateAnimator.setDuration(5000);
                    rotateAnimator.start();
                    break;
                case R.id.btn_scale:
                    ObjectAnimator scaleAnimator = ObjectAnimator.ofFloat(iv,"scaleY",1,4,2,0.5f);
                    scaleAnimator.setDuration(5000);
                    scaleAnimator.start();
                    break;
                case R.id.btn_translate:
                    ObjectAnimator translateAnimator = ObjectAnimator.ofFloat(iv,"translationY",0,200,50,300);
                    translateAnimator.setDuration(5000);
                    translateAnimator.start();
                    break;
                case R.id.btn_set:
    
                    //获取属性动画的集合对象
                    AnimatorSet animatorSet = new AnimatorSet();
    
                    ObjectAnimator translateY = ObjectAnimator.ofFloat(iv,"translationY",0,200,100,300);
                    translateY.setDuration(3000);
    
                    ObjectAnimator rotateY = ObjectAnimator.ofFloat(iv,"rotation",0,-720,720);
                    rotateY.setDuration(3000);
    
                    //第一种方式  执行   note:同一个动画只能执行一次
                    // play(),
                    // with(),translateY和with内的动画一起执行
                    // before(),translateY相对于before内的动画前执行
                    // after() translateY相对于after内的动画后执行
    //                animatorSet.play(translateY).with(rotateY);
    //                animatorSet.start();
    
    
                    //第二种方式
                    List<Animator> list = new ArrayList<>();
                    list.add(translateY);
                    list.add(rotateY);
                   // animatorSet.playTogether(list);//同步执行
                    animatorSet.playSequentially(list);//依次执行
    
                    //第三种可变参数
    //                animatorSet.playSequentially(rotateY,translateY);
    
                    animatorSet.start();
    
                    break;
    
                case R.id.btn_xml:
                    //使用动画填充器  将xml布局的动画添加进来
                    Animator animator = AnimatorInflater.loadAnimator(MainActivity.this,R.animator.background_object);
                    animator.setTarget(iv);//设置操作对象
                    animator.start();
    //                //使用动画填充器  将xml布局的动画添加进来
    //                Animator animator = AnimatorInflater.loadAnimator(MainActivity.this,R.animator.xml_object);
    //                animator.setTarget(iv);//设置操作对象
    //                animator.start();
                    break;
            }
        }
    }
    

    activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <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.qf.sxy.tweenanimation.MainActivity">
    
        <LinearLayout
            android:id="@+id/ll"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="horizontal">
            <Button
                android:id="@+id/btn_alpha"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="MyClick"
                android:text="透明"/>
            <Button
                android:id="@+id/btn_rotate"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="MyClick"
                android:text="旋转"/>
            <Button
                android:id="@+id/btn_scale"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="MyClick"
                android:text="缩放"/>
            <Button
                android:id="@+id/btn_translate"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="MyClick"
                android:text="位移"/>
            <Button
                android:id="@+id/btn_set"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="MyClick"
                android:text="集合"/>
            <Button
                android:id="@+id/btn_xml"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:onClick="MyClick"
                android:text="xml"/>
        </LinearLayout>
    
        <ImageView
            android:id="@+id/iv"
            android:src="@mipmap/rw"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/ll" />
    
    
    </RelativeLayout>
    
  • 相关阅读:
    Nginx下配置SSL安全协议
    Java嵌套类
    python命名空间与作用域
    Effective Java 4:类和接口
    VIM快捷键(转载)
    Eclipse快捷键
    Effective Java 3:对于所有对象都通用的方法
    Effective Java 1:创建和销毁对象-续
    Effective Java 1:创建和销毁对象
    python文件操作(转载)
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152174.html
Copyright © 2011-2022 走看看