Android JDK为我们提供了4种动画效果,分别是: AlphaAnimation,RotateAnimation, ScaleAnimation, TranslateAnimation.今天我想讲解的是TranslateAnimation这个动画效果。

TranslateAnimation是移动的动画效果。它有三个构造函数,分别是:

1.public TranslateAnimation(Context context,AttributeSet attrs) 略过

2.public TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)

这是最常用的一个构造方法,其具体的参数解释如下:

float fromXDelta:这个参数表示动画开始的点离当前View X坐标上的差值;

大家一定要注意这是 差值 不是具体坐标,要是为正那么就是 在屏幕右侧多些

float toXDelta, 这个参数表示动画结束的点离当前View X坐标上的差值;

float fromYDelta, 这个参数表示动画开始的点离当前View Y坐标上的差值;

float toYDelta)这个参数表示动画开始的点离当前View Y坐标上的差值;

如果view在A(x,y)点 那么动画就是从B点(x+fromXDelta, y+fromYDelta)点移动到C 点(x+toXDelta,y+toYDelta)点.

3.public TranslateAnimation (int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)

其具体的参数解释如下:
fromXType:第一个参数是x轴方向的值的参照(Animation.ABSOLUTE, Animation.RELATIVE_TO_SELF,or Animation.RELATIVE_TO_PARENT);

fromXValue:第二个参数是第一个参数类型的起始值;

toXType,toXValue:第三个参数与第四个参数是x轴方向的终点参照与对应值;

后面四个参数就不用解释了。如果全部选择Animation.ABSOLUTE,其实就是第二个构造函数。

以x轴为例介绍参照与对应值的关系:

如果选择参照为Animation.ABSOLUTE,那么对应的值应该是具体的坐标值,比如100到400,指绝对的屏幕像素单位

如果选择参照为Animation.RELATIVE_TO_SELF或者 Animation.RELATIVE_TO_PARENT指的是相对于自身或父控件,对应值应该理解为相对于自身或者父控件的几倍或百分之多少。

接下来具体介绍在Android如何使用TranslateAnimation 动画实现上下平移横线,实现了类似动态扫描框里面的感觉,其主要的设定过程如下。

首先在需要显示的xml文件中,根据自己的需求定义控件。

在定义.java文件中定义获取控件,mTranslate_img 是需要进行平移的控件
mTranslate_img = (ImageView) findViewById(R.id.translate_img);

接下来定义动画
mTranslateAnimation = AnimationUtils.loadAnimation(mContext, R.anim.translate_anim);
这里需要得到调用的activity的context,如果直接是在一个activity中实现,则直接this代替mContext就可以。
这句话是定义动画的效果,其中调用了R.anim.translate_anim,因此在没有在translate_anim.xml文件的情况下,需要自己去创建translate_anim.xml文件,在文件中写入如下代码,是对动画的基本运行性质的定义,在这个xml里面基本上可以定义完整的动画效果,包括动画的始末位置(二维坐标形式),运行一个动画周期所需的时间,运行多少次后停止,等等。

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"android:duration="1000"><translateandroid:fromYDelta="0%p"android:toYDelta="100%p"/>
</set>

接下来定义运行的方式,一共有很多种方式,本次调用的是先加速后减速的方式,也可以匀速,先减速后加速等等,不同的方式有不同的代码:
Interpolator interpolator = new AccelerateDecelerateInterpolator();//先加速后减速

然后将这个运动方式加载到动画中。
mTranslateAnimation.setInterpolator(interpolator);

这些步骤基本上都是在activity的onCreate()或者是非activity的.java初始化的时候中定义。到这里就已经定义好动画的基本效果了,当然,同样的,由于为了让动画在不同的机型上运行,不同的机型会有不同的显示屏大小,如果全部在xml中写死,那肯定不是理想的做法,所以,为了提高动画的可兼容性,这些动画的属性,又可以在代码中调用动画之前重新更改。

获取动画加载的高度,用于设定动画的始末位置。
float toYDelta = mAdjustSizeView.getHeight()/2;

可以根据高度设定运行一周所花的时间,这样在不同的机型上,动画运动的速度也就相近了,其中*14是由于自身设定的需求,可以自行根据不同需求调整。
int duration = (int)toYDelta * 14;

根据控件高度设定动画始末位置,值得注意的是动画是根据控件的二维坐标进行设定的,其具体的形式有不同的三种,可以回头看文章开始介绍的知识点。
TranslateAnimation translateAnimation = new TranslateAnimation(0,0,-toYDelta,toYDelta);

translateAnimation.setDuration(duration);//跑一个周期所用时长
translateAnimation.setRepeatCount(-1);//无限循环
translateAnimation.setInterpolator(new DecelerateInterpolator());
mTranslate_img.startAnimation(translateAnimation);

将这些代码封装成一个函数,这样在需要启动动画的地方调用函数就能让动画动起来。
/设置上下平移动画参数并启动

private void startTranslate(){float toYDelta = mView.getHeight()/2;int duration = (int)toYDelta * 14;TranslateAnimation translateAnimation = new TranslateAnimation(0,0,-toYDelta,toYDelta);//根据控件高度设定动画始末位置translateAnimation.setDuration(duration);//跑一个周期所用时长translateAnimation.setRepeatCount(-1);//无限循环translateAnimation.setInterpolator(new DecelerateInterpolator());mTranslate_img.startAnimation(translateAnimation);translateAnimation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}@Overridepublic void onAnimationEnd(Animation animation) {mTranslate_img.clearAnimation();}@Overridepublic void onAnimationRepeat(Animation animation) {}});
}

Android利用TranslateAnimation 动画实现上下平移横线(模拟人脸识别扫描,二维码识别扫描)相关推荐

  1. Android Zxing识别图片二维码识别率低

    1.使用Zxing对图片进行识别二维码 在gradle中引入识别库: implementation 'com.google.zxing:core:3.4.1' 对Bitmap进行识别二维码: int[ ...

  2. Android之条码扫描二维码扫描

    Android之条码扫描二维码扫描 二维码条形码扫描,参考技术网址: 1.Apache License 2.0 开源的 ZXing项目的简化版 http://xinlanzero.iteye.com/ ...

  3. Android实现二维码扫描功能(四)-ZXing识别图片二维码,相册选图

    简介 上一篇 Android实现二维码扫描功能(三)-闪光灯控制介绍了光线较弱情况下开启闪光灯来辅助二维码识别的方法. 本篇我们介绍如何识别相册中的图片(含二维码) 动态演示 使用模拟器录制了动画演示 ...

  4. Android基于Google Zxing实现二维码/条形码扫描、生成二维码/条形码

     二维码/条形码生成器 二维码/条形码扫描器 一.二维码与条形码工作原理 目前的很多应用上都有扫码功能,当时微信推出二维码扫码功能时,觉得imagine,通过一张简单的图片就能扫描添加还有,还有分 ...

  5. Android二维码识别与生成

    最近几年二维码是越来越火了,特别是随着移动端的便利性,走到哪里都是扫一扫.二维码支付.二维码扫描登录.二维码扫描关注加好友.....越来越多的应用也都加上了二维码扫描的功能,作为移动开发者,对这些新奇 ...

  6. Android 扫描二维码 以及优化方面相关知识

    优化zxing 扫描二维码出现卡顿 扫描慢等现象:解决方案 :解决办法很简单,就是不仅仅使用聚焦框里的图像数据,而是采用全幅图像的数据.public PlanarYUVLuminanceSource ...

  7. Android使用ZBar扫描二维码/条形码(实例)+常见问题汇总

    写在前面:因项目需求,需要实现二维码扫码功能,笔者测试过多种开源扫码工具,但因不跨平台.扫描速度慢等问题逐个放弃,最后选用ZBar实现功能,笔者发现ZBar扫码在跨主流手机平台.扫码速度等方面有较明显 ...

  8. Android扫描二维码 实现 登录网页

    工程代码:ScanQRcode.zip ------------------------------------------------------------------ 1. 扫描二维码登录的实现 ...

  9. 基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能

    NextQRCode ZXing开源库的精简版 **基于ZXing Android实现生成二维码图片和相机扫描二维码图片即时解码的功能 原文博客 附源码下载地址** 与原ZXingMini项目对比 N ...

最新文章

  1. C语言初学者代码中的常见错误与瑕疵(2)
  2. 关于html的a标签的target=__blank 的安全漏洞问题
  3. 语言沟通6c,如何做到轻松有效沟通
  4. SAX解析XML 详解
  5. Linux 编程--三种常用的定时器
  6. 酒店前厅计算机的作用,浅谈智能化对酒店前厅员工的服务质量和影响
  7. Layui表格之多列合并展示
  8. 关于UI自动化测试元素定位细节记录
  9. 自己封装一个弹框插件
  10. python字典遍历的几种方法(转)
  11. Cmake确实应该用到的时候再学
  12. HTML5 Canvas操作图像像素
  13. Perl 读取特定格式的文件名
  14. 黄聪:使用Python中的HTMLParser、cookielib抓取和解析网页、从HTML文档中提取链接、图像、文本、Cookies(二)
  15. pl2303 USB转串口驱动
  16. jsp 按照学号查找学生_​全国学籍号查询平台:https://my.chsi.com.cn/archive/index.jsp...
  17. 摄影场景拍摄方法笔记
  18. Gitee+PicGo+Typora图床搭建丨出现 Error: You must be logged in to use 的解决方法
  19. 第一周礼拜四 神藉着祂的众仆人行事(上)
  20. UED、UCD、UE、UI、交互设计这 5 个名词有哪些区别?

热门文章

  1. 解决使用高分辨率笔记本分辨率放大100%以上运行程序界面控件不跟随方大方式qt+gtk+ui
  2. Xshell开多个会话和会话分屏
  3. 二元置信椭圆r语言_R语言 第4章 初级绘图(6)
  4. window7或8下,U盘安装Centos6.5双系统,问题总结
  5. 使用U盘在虚拟机下安装双系统(windows and linux)乃至多系统
  6. 马太效应(Matthew Effect)
  7. 在Layui框架里设计一个评论列表的前端界面
  8. python Flask 10 Flask请求上下文管理werkzeug
  9. python判断火车票座位号分布图_火车票怎么看车厢号和座位号
  10. mysql enclosed by_MySql csv文件导入导出