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(平移动画)相关推荐

  1. android view退出动画,android animation——view进来退出动画

    在设计android项目的时候我们有时候需要对activity的进入退出做一些动画处理,虽然android自身已经做了动画处理,但是我们需要更加炫酷的动画就需要自己去写一些动画了. 有时候不光acti ...

  2. android 创建文件夹_Android 动画小记

    精简介绍Android中的动画,主要介绍用法. 动画种类 包括了:补间动画.逐帧动画.属性动画,前两者统称为视图动画. 补间动画 包括了平移.旋转.缩放和透明度四种,每种动画支持xml和代码设置.另外 ...

  3. Android Animation和Animator

    Android Animation和Animator 一.一个很蠢的Bug 二.Animation 2.1 TranslateAnimation平移动画 2.2 RotateAnimation旋转动画 ...

  4. Android平移补间动画,Android 补间动画之平移动画TranslateAnimation

    Android动画系列 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 duration 时间 f ...

  5. android image 位移动画_「translateanimation」Android 补间动画之平移动画TranslateAnimation - seo实验室...

    translateanimation 博客导航: 1.介绍: Android补间动画之平移动画,在实际的开发过程中,其实有好多地方需要用到平移动画,这是对于平移动画的简单介绍. 2.属性 durati ...

  6. Android快速开发 动画系列(一) 之 TranslateAnimation(平移动画)

    TranslateAnimation类:位置变化动画类 TranslateAnimation类是Android系统中的位置变化动画类,用于控制View对象的位置变化,该类继承于Animation类.T ...

  7. Android开发--图形图像与动画(二)--Animation实现图像的 渐变、缩放、位移、旋转

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 下面就讲一下Tweene Animations. 主要类: ...

  8. Android开发--图形图像与动画(二)--Animation实现图像的 渐变 缩放 位移 旋转

    Android 平台提供了两类动画. 一类是Tween动画,就是对场景里的对象不断的进行图像变化来产生动画效果(旋转.平移.放缩和渐变). 下面就讲一下Tweene Animations. 主要类: ...

  9. Android animation动画

    关于动画的实现,Android提供了Animation,在Android SDK介绍了2种Animation模式: 1. Tween Animation:通过对场景里的对象不断做图像变换(平移.缩放. ...

  10. Android 仿微信红包动画 平移动画

    Android 仿微信红包动画 平移动画 先看效果图: 简单思路: 先找好素材,一张红包封面和 "开"这个图片,先用ps将红包图片P成两部分,两个椭圆的样子."开&quo ...

最新文章

  1. 你太菜了,竟然不知道Code Review...
  2. Asp.net 身份验证、授权概述
  3. 应用程序基础知识:activity和intent——Android开发秘籍
  4. android 自定义span_Android自定义可点击的ImageSpan并在TextView中内置View
  5. 基于deep learning的快速图像检索系统
  6. 定义一个圆类——Circle,在类的内部提供一个属性:半径(r),同时 提供 两个 方 法 : 计算 面积 ( getArea() ) 和 计算 周长(getPerimeter()) 。
  7. Android 自定义WebView弹窗及屏蔽弹窗
  8. mysql loop循环实例_MySql CURSOR+LOOP循环-使用小实例
  9. ArcGIS利用数据驱动工具条批量出图(python代码)
  10. hadoop大数据概述
  11. 计算机内存怎么与频率匹配,如何进行内存频率设置?内存频率设置方法
  12. 黑马程序员——网络编程的应用
  13. LSF集群作业管理系统
  14. 如何选择适合你的兴趣爱好(一),拉丁舞
  15. 史上最简单的软件破解——5行脚本代码完美破解99%的过期软件
  16. MTU TTL RTT
  17. Python二手车价格预测(二)—— 模型训练及可视化
  18. NR DCI Format介绍
  19. php如何实现单点登录jira,JIRA 集成 Crowd 实现单点登录
  20. 农民伯伯 内容相当丰富!

热门文章

  1. java 利用 ffmpeg 实现音频格式转码
  2. 基于javacv的视频转码(升级版)
  3. 【转载】三方框架整理
  4. 什么是蒙特卡罗仿真?
  5. xp系统怎么添加ntp服务器,1 Windows xp NTP服务器的配置
  6. Python 代码超级玛丽实现
  7. 数据库实验报告(一)
  8. 数据清洗工具 OpenRefine简介
  9. 最小二乘支持向量机LSSVM
  10. liunx下用xshell实现 密钥 + 密码 登录