Android Animation之TranslateAnimation(平移动画)
Android的View Animation(视图动画)中的Tween Animation效果,Tween Animation分为4种动画效果,分别是:alpha (透明变化) translate(位置移动) scale(缩放) rotate(旋转),而本篇文章说的是translate(位置移动)的效果。
Translate动画是非常好理解,就是定义一个开始的位置和一个结束位置,定义移动时间,然后就能自动产生移动动画。Android的translate移动方向有 横向(X) 竖向(Y)。
TranslateAnimation共有三个构造方法。除了第一个,另外两个参数稍微有点区别
- fromXDelta:动画起始时 X坐标上的移动位置
- toXDelta: 动画结束时 X坐标上的移动位置
- fromYDelta: 动画起始时Y坐标上的移动位置
- oYDelta:动画结束时Y坐标上的移动位置
- fromXType:指定X轴的平移模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
- fromXValue:X平移起始值
- toXType:指定X轴的平移模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
- toXValue:X平移结束值
- fromYType:指定Y轴的平移模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
- fromTValue:Y平移起始值
- toYType:指定Y轴的平移模式,可以取值Animation.ABSOLUTE,Animation.RELATIVE_TO_SELF,Animation.RELATIVE_TO_PARENT。
- toYValue:Y平移结束值
下面展示一个使用平移动画来实现的一个dome按照惯例,我们先看看效果图:
package com.example.myapplication;import android.content.res.Resources;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationSet;
import android.view.animation.TranslateAnimation;
import android.widget.FrameLayout;
import android.widget.LinearLayout;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private View view1;private LinearLayout view2;private int view1MaxTopMargin = 178;private int view1MinTopMargin = 88;private int view2MaxTopMargin = 210;private int view2MinTopMargin = 56;private int view2LeftMargin = 44;private int view2RightMargin = 44;private boolean canMovingUp = true;private boolean canMovingDown = false;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);view1 = (View)findViewById(R.id.view1);view2 = (LinearLayout)findViewById(R.id.view2);findViewById(R.id.btn_move_up).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (!canMovingUp) {return;}moveUpAnimation(view1, view1MinTopMargin, view1MaxTopMargin, 0, 0);moveUpAnimation(view2, view2MinTopMargin, view2MaxTopMargin, view2LeftMargin, view2RightMargin);}});findViewById(R.id.btn_move_down).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (!canMovingDown) {return;}moveDownAnimation(view1, view1MinTopMargin, view1MaxTopMargin, 0, 0);moveDownAnimation(view2, view2MinTopMargin, view2MaxTopMargin, view2LeftMargin, view2RightMargin);}});}private void moveUpAnimation(final View view, final int minTopMargin, final int maxTopMargin, final int mLeftMargin, final int mRightMargin) {AnimationSet mAnimatorSet = new AnimationSet(true);TranslateAnimation moveUpAnimation = new TranslateAnimation(0F, 0F, 0, -dpToPx(maxTopMargin - minTopMargin));moveUpAnimation.setDuration(300);//设置动画变化的持续时间moveUpAnimation.setFillEnabled(true);//使其可以填充效果从而不回到原地moveUpAnimation.setFillAfter(true);//不回到起始位置mAnimatorSet.addAnimation(moveUpAnimation);view.startAnimation(mAnimatorSet);mAnimatorSet.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {canMovingUp = false;canMovingDown = true;view.clearAnimation();//动画结束后更新view到终点位置FrameLayout.LayoutParams ll = new FrameLayout.LayoutParams(view.getLayoutParams());ll.setMargins(dpToPx(mLeftMargin), dpToPx(minTopMargin), dpToPx(mRightMargin), dpToPx(maxTopMargin - minTopMargin));view.setLayoutParams(ll);}@Overridepublic void onAnimationRepeat(Animation animation) {}});}private void moveDownAnimation(final View view, final int minMargin, final int maxMargin, final int mLeftMargin, final int mRightMargin) {AnimationSet mAnimatorSet = new AnimationSet(true);TranslateAnimation moveDownAnimation = new TranslateAnimation(0F, 0F, 0f, dpToPx(maxMargin - minMargin));moveDownAnimation.setDuration(300);//设置动画变化的持续时间moveDownAnimation.setFillEnabled(true);//使其可以填充效果从而不回到原地moveDownAnimation.setFillAfter(true);//不回到起始位置mAnimatorSet.addAnimation(moveDownAnimation);view.startAnimation(mAnimatorSet);mAnimatorSet.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {canMovingUp = true;canMovingDown = false;view.clearAnimation();//动画结束后更新view到终点位置FrameLayout.LayoutParams ll = new FrameLayout.LayoutParams(view.getLayoutParams());ll.setMargins(dpToPx(mLeftMargin), dpToPx(maxMargin), dpToPx(mRightMargin), 0);view.setLayoutParams(ll);}@Overridepublic void onAnimationRepeat(Animation animation) {}});}/*** dp转换为px*/public static int dpToPx(float dp) {return (int) (dp * Resources.getSystem().getDisplayMetrics().density + 0.5f);}
}
好了,本篇文章就这样了,存在不足的地方还望指导,感谢
源码下载
Android Animation之TranslateAnimation(平移动画)相关推荐
- android view退出动画,android animation——view进来退出动画
在设计android项目的时候我们有时候需要对activity的进入退出做一些动画处理,虽然android自身已经做了动画处理,但是我们需要更加炫酷的动画就需要自己去写一些动画了. 有时候不光acti ...
- android 创建文件夹_Android 动画小记
精简介绍Android中的动画,主要介绍用法. 动画种类 包括了:补间动画.逐帧动画.属性动画,前两者统称为视图动画. 补间动画 包括了平移.旋转.缩放和透明度四种,每种动画支持xml和代码设置.另外 ...
- Android Animation和Animator
Android Animation和Animator 一.一个很蠢的Bug 二.Animation 2.1 TranslateAnimation平移动画 2.2 RotateAnimation旋转动画 ...
- Android平移补间动画,Android 补间动画之平移动画TranslateAnimation
Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...
- android image 位移动画_「translateanimation」Android 补间动画之平移动画TranslateAnimation - seo实验室...
translateanimation 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 durati ...
- Android快速开发 动画系列(一) 之 TranslateAnimation(平移动画)
TranslateAnimation类:位置变化动画类 TranslateAnimation类是Android系统中的位置变化动画类,用于控制View对象的位置变化,该类继承于Animation类.T ...
- Android开发--图形图像与动画(二)--Animation实现图像的 渐变、缩放、位移、旋转
Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 下面就讲一下Tweene Animations. 主要类: ...
- Android开发--图形图像与动画(二)--Animation实现图像的 渐变 缩放 位移 旋转
Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 下面就讲一下Tweene Animations. 主要类: ...
- Android animation动画
关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...
- Android 仿微信红包动画 平移动画
Android 仿微信红包动画 平移动画 先看效果图: 简单思路: 先找好素材,一张红包封面和 "开"这个图片,先用ps将红包图片P成两部分,两个椭圆的样子."开&quo ...
最新文章
- 你太菜了,竟然不知道Code Review...
- Asp.net 身份验证、授权概述
- 应用程序基础知识:activity和intent——Android开发秘籍
- android 自定义span_Android自定义可点击的ImageSpan并在TextView中内置View
- 基于deep learning的快速图像检索系统
- 定义一个圆类——Circle,在类的内部提供一个属性:半径(r),同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。
- Android 自定义WebView弹窗及屏蔽弹窗
- mysql loop循环实例_MySql CURSOR+LOOP循环-使用小实例
- ArcGIS利用数据驱动工具条批量出图(python代码)
- hadoop大数据概述
- 计算机内存怎么与频率匹配,如何进行内存频率设置?内存频率设置方法
- 黑马程序员——网络编程的应用
- LSF集群作业管理系统
- 如何选择适合你的兴趣爱好(一),拉丁舞
- 史上最简单的软件破解——5行脚本代码完美破解99%的过期软件
- MTU TTL RTT
- Python二手车价格预测(二)—— 模型训练及可视化
- NR DCI Format介绍
- php如何实现单点登录jira,JIRA 集成 Crowd 实现单点登录
- 农民伯伯 内容相当丰富!