自定义动画

article/2025/10/8 15:22:23

        自定义动画非常简单,只需要实现它的applyTransformation的逻辑就可以了,不过通常情况下,还需要覆盖父类的initialize方法来实现一些初始化工作。applyTransformation方法有如下两个参数。

        applyTransformation(float interpolatedTime, Transformation t)

        第一个参数interpolatedTime就是前面讲的插值器的时间因子,这个因子是由动画当前完成的百分比和当前时间所对应的插值所计算的来的,取值范围为0到1.0。

        第二个参数Transformation非常简单,它是矩阵的封装类,一般使用这个类来获得当前的矩阵对象,代码如下所示。

        final Matrix matrix = t.getMatrix();

        通过改变获得的matrix对象,可以将动画效果实现出来,而对于matrix的变换操作,基本可以实现任何动画效果。

            @Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {final Matrix matrix = t.getMatrix();//通过matrix的各种操作来实现动画matrix.XXXXXX;}};

        通过模拟电视机关闭的效果来看看简单的矩阵变换是如何实现动画效果的。电视机关闭的效果非常简单,让一个图片纵向比率不断虽小即可,对于的矩阵处理方法如下。

        mCenterWidth = imageView.getMeasuredWidth()/2;mCenterHeight = imageView.getMeasuredWidth()/2;Animation animation = new Animation() {@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {final Matrix matrix = t.getMatrix();//通过matrix的各种操作来实现动画matrix.preScale(1,1-interpolatedTime, mCenterWidth, mCenterHeight);}};animation.setDuration(1000);imageView.startAnimation(animation);

        其中mCenterWidth和mCenterHeight即为缩放的中心点,设置为图片中心即可。这样,通过一个简单的矩阵变换,就可以模拟电视机关闭的动画,效果图如下所示。


        当然,你可以设置更精确的插值器,并将0到1.0的时间因子拆分出不同的过程,从而对不同的过程采用不同的动画效果,模拟更加真实的特效。

        接下来结合矩阵,并使用Camera类来实现一个自定义的3D动画效果。需要注意的是,这里的Camera并不是指手机中的相机,而是android.graphics.Camera中的Camera类,它封装了openGL的3D动画,从而可以非常方便地创建3D动画效果。把Camera想象成一个真实的摄像机,当物体固定在某处时,只需要移动摄像机就能拍摄到具有立体感的图像,因此通过它就可以实现各种3D效果,Camera类的坐标体系如图7.6所示。

        下面继续分析代码的实现。首先,在初始化方法中对Camera和一些其他参数进行初始化,代码如下。

    public void btn3DCustomAnimation(View view) {Animation animation = new Animation() {@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);//设置默认时长setDuration(2000);//设置动画结束后保留状态setFillAfter(true);//设置默认插值器setInterpolator(new BounceInterpolator());mCenterWidth = imageView.getMeasuredWidth()/2;mCenterHeight = imageView.getMeasuredWidth()/2;}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {final Matrix matrix = t.getMatrix();mCamera.save();//使用Camera设置旋转的角度mCamera.rotateY(mRotateY*interpolatedTime);//将旋转的角度设置到matrix上mCamera.getMatrix(matrix);mCamera.restore();//通过pre方法设置矩阵作用前的偏移量来改变旋转中心matrix.preTranslate(mCenterWidth,mCenterHeight);matrix.postTranslate(-mCenterWidth,-mCenterHeight);}};animation.setDuration(1000);imageView.startAnimation(animation);}

        通过上面的代码可以看到,使用Camera类实现动画效果非常简单,无非就是设置三个坐标轴的旋转角度,不过需要注意是最后两行代码,通过这两行代码,可以改变旋转时的默认旋转中心。程序运行结果如下图所示。左图时默认图,右图时点击后的效果图。

   


http://chatgpt.dhexx.cn/article/wZ9Arnwn.shtml

相关文章

自定义控件三部曲之动画篇(四)——ValueAnimator基本使用

前言:不要让别人的无知断送了你的梦想,永远坚信你所坚信的。 相关文章: 《Android自定义控件三部曲文章索引》:http://blog.csdn.net/harvic880925/article/details/50995268 一、概述 long long ago,我写过几篇有关…

[HTML/CSS]动画效果以及自定义动画效果

一,实现div或者文字的当鼠标浮于其上时的动画效果: 1,transition加在div中,实现动画效果的过渡效果,transition: all 3s;其中all表示所有样式都参与过渡,3s表示实现效果的时间;linear为使动画匀…

css如何让文字强制换行

我们在编写html时, 有时候,常常需要在移动端用到一些table的属性,来呈现一些数据。如果说我们的数据内不含连续的数字或字母时,显示是不会出错的。 可是如果我们要呈现的数据为数字或长字母信息时,常常会出现这样的情…

CSS文本强制换行

发生背景: 在没有空格的(字母、数字,符号),超过容器宽度时就会把容器撑大,不换行。所以在这里需要对其设置强制换行的样式; 解决方案: /* word-wrap: break-word; */ /…

css强制换行和禁止换行

强制换行 word-break: break-all; /* 只对英文起作用,以字母作为换行依据。 */ word-wrap: break-word; /* 只对英文起作用,以单词作为换行依据。 */ white-space: pre-wrap; /* 只对中文起作用,强制换行。 */ 禁止换行 white-space:…

Css 强制英文自动换行以及word-wrap、word-break、white-space、overflow的用法

关于换行的几个知识点: 1、Css强制英文或数字自动换行 2、让中文按关键词或标签换行 3、Css强制中文不自动换行 4、Css强制中文不自动换行并自动隐藏; 5、Css中英文或数字的超出部分自动省略号…; 6、Css中word-wrap、word-break、white-spa…

功能测试的用例测试方法

一、等价类划分法: 即把所有可能输入的数据划分为若干个区域,然后从每个区域中取少数有嗲表行的数据进行测试。 例1:某网页的年龄输入框要求输入20~99的整数。(说明:当输入的数据复合取值范围要求时提示:…

计算机性能检查方法,测试电脑性能的方法步骤详解

想知道自己电脑的运行性能吗?下面就让学习啦小编教大家如何测试电脑的性能吧。 测试电脑性能的方法 1.使用系统功能进行评测电脑的运行性能 这种方法就是通过windows自带的评测功能进行测试。 打开资源管理器,右键点击“属性”,进入到相应的窗口中来! 如…

性能测试七种常用方法,以及四大应用领域

文章目录 什么是性能测试性能指标测试模型测试种要有监控有预定条件性能测试中要有场景性能测试中有分析调优性能测试结果报告 常用的七种性能测试方法后端性能测试前端性能测试代码级性能测试压力测试配置测试并发测试可靠性测试 性能测试的四大应用领域能力验证能力规划性能调…

测试方法

一、 测试方法的分类 静态测试方法动态测试方法 1. 静态测试方法 不执行程序的测试方法。主要用于测试文档和代码(文档)。 2. 动态测试方法 通过运行程序来发现缺陷的测试方法。 黑盒测试方法白盒测试方法灰盒测试方法(白 黑&#xff0…

无线网卡性能怎么测试软件,无线性能测试平台和方法

无线性能测试平台和方法 无线性能测试平台和方法 JCG JYR-N495 无线路由器 测试平台: 客户端:Thinkpad X200笔记本 450M外置无线网卡 服务器端:Thinkpad T400笔记本 测试软件:NetIQ Chariot v5.4;Endpoint6.0。 测试方…

银行核心业务系统性能测试方法

目录 前言 1、测试内容 2、测试方法 3、注意事项 前言 本文讨论的是基于字符终端型的银行核心业务系统。银行核心业务系统由于其复杂的业务流程,以及特殊的终端字符形式,与一般的B/S结构、C/S结构系统有较大的差异,其性能测试方法也存在很…

Web前端性能测试方法

今天介绍个前端性能测试的基本套路。 Web前端性能测试可以从以下几个方面入手: 1.页面加载性能测试:测试网页的加载时间,包括页面的首次加载、资源(如图片、脚本、样式表等)的加载、页面响应时间等。 2.页面渲染性能…

交换机软件测试,交换机性能测试方法

首先是看到gogogo10 在论坛回贴所提到的方法,才总结写出来,感谢gogogo10的帮助。 分为二层三层交换机的测试 测试都会用到测试仪,或称发包机,测试机,这个我也不太了解,所以这里就不提,只说说测试…

性能测试方法

备注:以下是常用的测试方法,当然我们还是要根据项目的需要而定,不同项目,不同业务,压测方法不同。比如长连接和短链接不同,协议不同,测试方法不同,大家要根据情况而定。 负载测试&a…

服务器性能测试方法,服务器性能测试方法

服务器性能测试方法 内容精选 换一换 登录Windows云服务器时,系统报错,错误代码为“0x112f”,如图1所示。云服务器内存不足。方法一(推荐):变更规格,升级云服务器的CPU、内存大小。变更规格的方法,请参见变更规格(CPU和内存)。变更规格,升级云服务器的CPU、内存大小。变…

功能测试的方法

1.等价类划分法: 等价类划分法是把所有可能的输入划分成若干部分(子集),然后从每一个子集中选取具有代表性的数据作为测试用例。 有效等价类:有效等价类指对于程序规格说明来说,是合理的、有意义的输入数据构成的集合。…

功能测试的6种方法

功能测试是软件测试中最基础、最常见的测试方法之一,它通过一系列测试用例对软件系统的各项功能进行验证,以发现潜在的缺陷和问题点。 下面我们来介绍一下常见的六种功能测试方法。 1. 黑盒测试法 黑盒测试法也称为功能测试法,它主要从用户…

aes256位加密_AES加密256位

aes256位加密 AES (Advanced Encryption Standard) is the most widely used symmetric encryption algorithm. AES is used in a wide array of applications that include the encryption of data at rest, and secure file transfer protocols like HTTPS. AES(高级加密标准…

mysql aes256_pl/sql:aes256加密解密

调用相应的API对BLOB数据 相应的加密和解密 PL/SQL 加密解密 --加密function encrypt_aes256 (p_blob in blob, p_key in varchar2) return blobas l_key_raw raw(32); l_returnvalue blob;begin /* Purpose: encrypt blob Remarks: p_key should be 32 charac 调用相应的API对…