属性动画
来源:互联网 发布:淘宝gsx查询 编辑:程序博客网 时间:2024/06/05 22:48
在上一篇博客中,介绍了补间动画,这篇博客中将介绍属性动画
常见的属性动画和补间动画一样也包括平移动画、缩放动画、透明度变化动画、旋转动画等
平移动画的演示效果:
缩放动画的展示效果:
透明度变化的动画的展示效果:
旋转动画的展示效果:
一起飞动画的展示效果,一起飞表示所有的动画一起播放:
xml定义的属性动画的实现效果
实现方式
第一步:使用Android Studio创建一个Android工程,并且在drawable文件夹中放一张图片
第二步:新建一个objanimator.xml文件并在文件中添加下面的代码
<?xml version="1.0" encoding="utf-8"?><set xmlns:android="http://schemas.android.com/apk/res/android" > <objectAnimator android:propertyName="translationX" android:duration="200" android:repeatCount="1" android:repeatMode="reverse" android:valueFrom="-100" android:valueTo="100" > </objectAnimator></set>
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="平移" android:onClick="translation"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="缩放" android:onClick="scale"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="透明" android:onClick="alpha"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="旋转" android:onClick="rotation"/> </LinearLayout> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="一起飞" android:onClick="flay"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="xml定义的属性动画" android:onClick="xml"/> </LinearLayout> <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/gold" android:layout_centerInParent="true"/> </RelativeLayout></LinearLayout>
最后一步:修改MainActivity.java中的代码
package com.fyt.propertyanimate;import android.animation.Animator;import android.animation.AnimatorInflater;import android.animation.AnimatorSet;import android.animation.ObjectAnimator;import android.animation.ValueAnimator;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.ImageView;public class MainActivity extends Activity { //用于创建ImageView对象 private ImageView iv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获得布局文件上的ImageView iv = (ImageView) findViewById(R.id.iv); } //平移按钮响应函数 public void translation(View view) { /*** * 创建修改组件的x坐标的属性动画 * 第一个参数:动画作用于那个组件 * 第二个参数:组件的属性 * 第三个参数:组件第一次移动的x坐标 = 组件的真实的x坐标 + 10 * 第四个参数:组件第二次移动的x坐标 = 组件的真实的x坐标 + 70 * 第五个参数:组件第三次移动的x坐标 = 组件的真实的x坐标 + 20 * 第六个参数:组件第四次移动的x坐标 = 组件的真实的x坐标 + 100 */ ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "translationX", 10, 70, 20, 100); //设置动画的播放时间 oa.setDuration(2000); //设置动画循环播放的次数 oa.setRepeatCount(1); //设置第二次播放动画的方向为相反播放 oa.setRepeatMode(ValueAnimator.REVERSE); //播放属性动画 oa.start(); } //缩放按钮响应函数 public void scale(View view) { //创建缩放的属性动画 ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "scaleX", 1, 1.6f, 1.2f, 2); oa.setDuration(200); oa.start(); } //修改透明度按钮响应函数 public void alpha(View view) { //创建改变透明度的属性动画 ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "alpha", 0, 0.6f, 0.2f, 1); oa.setDuration(200); oa.start(); } //旋转按钮响应函数 public void rotation(View view) { ObjectAnimator oa = ObjectAnimator.ofFloat(iv, "rotation", 0, 180, 90, 360); oa.setDuration(200); oa.start(); } //一起飞按钮响应函数 public void flay(View view) { //创建动画师集合 AnimatorSet set = new AnimatorSet(); ObjectAnimator oa1 = ObjectAnimator.ofFloat(iv, "translationX", 10, 70, 20, 100); oa1.setDuration(2000); oa1.setRepeatCount(1); oa1.setRepeatMode(ValueAnimator.REVERSE); ObjectAnimator oa2 = ObjectAnimator.ofFloat(iv, "translationY", 10, 70, 20, 100); oa2.setDuration(2000); oa2.setRepeatCount(1); oa2.setRepeatMode(ValueAnimator.REVERSE); ObjectAnimator oa3 = ObjectAnimator.ofFloat(iv, "scaleX", 1, 1.6f, 1.2f, 2); oa3.setDuration(2000); oa3.setRepeatCount(1); oa3.setRepeatMode(ValueAnimator.REVERSE); ObjectAnimator oa4 = ObjectAnimator.ofFloat(iv, "rotation", 0, 180, 90, 360); oa4.setDuration(2000); oa4.setRepeatCount(1); oa4.setRepeatMode(ValueAnimator.REVERSE); //设置动画挨个播放 //set.playSequentially(oa1, oa2, oa3, oa4); //设置所有的动画一起播放 set.playTogether(oa1, oa2, oa3, oa4); //播放动画 set.start(); } //属性动画按钮响应函数 public void xml(View view) { //使用动画填充器将用xml文件创建好的属性动画文件填充成动画师对象 Animator at = AnimatorInflater.loadAnimator(this, R.animator.objanimator); //设置动画作用于那个组件 at.setTarget(iv); //播放动画 at.start(); }}
0 0
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 属性动画
- 为什么大型网站前端使用 PHP 后台逻辑用 Java?
- Struts2标签库
- Java excel表 导出 POI2003
- git submodule 管理子工程
- socket中的函数遇见EINTR的处理
- 属性动画
- 获取C++虚表地址和虚函数地址
- PHP学习之路——类与面向对象
- Fragment全解析系列(一):那些年踩过的坑
- 用自己的数据训练Faster-RCNN
- 理解 Java GC(三)
- 交换知识
- Spring之IoC----常见类型数据的注入
- shell(一)