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

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

除了可以使用定义xml文件来设置动画之外,还可以使用java代码来进行控制动画。

示例如下:

布局文件:

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"

>

android:id="@+id/id_img"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:onClick="click"

android:src="@mipmap/ic_launcher"

/>

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="移动"

/>

主活动:

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();

运行:

6152779ead100f697249d691db7fda94.png

可以看见效果是一样的。

修改一下代码:

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

这次是Y方向:

71995e548fcbc0f74bdd9f7e18ca52eb.png

旋转

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

运行:

ae26e6d8eb335994415576fac1535d35.png

组合动画

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();

运行:

cc90e883fa99cb11b60f94c5c1ef3997.png

可以看到这三个动画同时执行

使用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();

运行:

85dd22349a56c89b54850c52f2ebcd56.png

使用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();

运行:

b8dd07a0a584348d1d8ce3a908804553.png

效果一样。

之前都是同事播放的,现在可以按照顺序来执行。

set.playSequentially(a1, a2, a3);

运行:

可以看到先旋转,再向X方向移动,再向Y方向移动。

也可这样进行顺序控制。

先同时执行X和Y方向的移动,再进行旋转

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

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

运行:

f75cd6cb6c79c7fcc0747360bc5d3373.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值