首页 web前端 html教程 自定义Animation、3D动画旋转_html/css_WEB-ITnose

自定义Animation、3D动画旋转_html/css_WEB-ITnose

Jun 21, 2016 am 09:13 AM

    

/**

 * 自定义动画,利用Camera可以实现3D效果 在Activity中调用一下方法 image = (ImageView)

 * findViewById(R.id.image) ; Bitmap bitmap =

 * BitmapFactory.decodeResource(getResources(), R.drawable.main_back_pic) ;

 * image.setImageBitmap(bitmap); image.startAnimation(new

 * MyAnimation(bitmap.getWidth()/2, bitmap.getHeight()/2, 3500));

 * */

public class MyAnimation extends Animation {


private int width;

private int height;

private int duration;// 持续的时间

private Camera camera = new Camera();


public MyAnimation(int width, int height, int duration) {

this.height = height;

this.width = width;

this.duration = duration;

}


@Override

public void initialize(int width, int height, int parentWidth,

int parentHeight) {

setDuration(duration);// 设置动画的执行时间

setFillAfter(true);// 动画结束后动画停留在动画的最后一帧,setFillBefore(true):动画结束后停留在第一帧

// 动画设置成匀速运动,设置运动状态,在XML文件里设置没有作用,必须用在Java代码中设置

setInterpolator(new LinearInterpolator());

super.initialize(width, height, parentWidth, parentHeight);

}


@Override

protected void applyTransformation(float interpolatedTime,

Transformation trans) {

/**

* 此方法中的两个参数,第一个interpolatedTime,代表了抽象动画进行的时间,不管时间进行多久,其参数数值都是从0到1

* 0代表动画开始,1代表动画结束, Transformation是对动画所做的改变 Camera提供的方法:getMatrix(Matrix

* matrix)将Camera所做的变化应用到matrix上 rotateX(float deg)将目标组件沿着X轴进行旋转

* rotateY(float deg)将目标组件沿着Y轴进行旋转 totateZ(float deg)将组件沿着Z轴进行旋转

* translate(float x,float y,float z)将目标组件在三维空间内进行位移转换

* applyToCanvas(Canvas canvas)把Camera所做的变化应用到Canvas

* */

super.applyTransformation(interpolatedTime, trans);

camera.save();

// 把目标组件在三维视图中进行切换

// 在第一次调用的时候nterpolatedTime的值为0,相当于把view移动了10个像素,以后越来越少,一个周期过去,再变向转动

camera.translate(0.0f, 0.0f, (10 - 10 * interpolatedTime));

// camera.rotateX(360 * interpolatedTime);

camera.rotateY(360 * interpolatedTime);

// camera.rotateZ(360 * interpolatedTime);

Matrix matrix = trans.getMatrix();

camera.getMatrix(matrix);

// preTranslate是指在setScale前,平移,postTranslate是指在setScale后平移

// 注意他们参数是平移的距离,而不是平移目的地的坐标!

// 由于缩放是以(0,0)为中心的,所以为了把界面的中心与(0,0)对齐,就要preTranslate(-centerX,

// -centerY),

// setScale完成后,调用postTranslate(centerX,

// centerY),再把图片移回来,这样看到的动画效果就是activity的界面图片从中心不停的缩放了

// centerX和centerY是界面中心的坐标

matrix.preTranslate(-width, -height);

matrix.postTranslate(width, height);


camera.restore();

}

}


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验? 公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验? Mar 04, 2025 pm 12:32 PM

公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?

如何使用HTML5表单验证属性来验证用户输入? 如何使用HTML5表单验证属性来验证用户输入? Mar 17, 2025 pm 12:27 PM

如何使用HTML5表单验证属性来验证用户输入?

< iframe>的目的是什么。 标签?使用时的安全考虑是什么? < iframe>的目的是什么。 标签?使用时的安全考虑是什么? Mar 20, 2025 pm 06:05 PM

< iframe>的目的是什么。 标签?使用时的安全考虑是什么?

如何高效地在网页中为PNG图片添加描边效果? 如何高效地在网页中为PNG图片添加描边效果? Mar 04, 2025 pm 02:39 PM

如何高效地在网页中为PNG图片添加描边效果?

< meter>的目的是什么。 元素? < meter>的目的是什么。 元素? Mar 21, 2025 pm 12:35 PM

< meter>的目的是什么。 元素?

> gt;的目的是什么 元素? > gt;的目的是什么 元素? Mar 21, 2025 pm 12:34 PM

> gt;的目的是什么 元素?

< datalist>的目的是什么。 元素? < datalist>的目的是什么。 元素? Mar 21, 2025 pm 12:33 PM

< datalist>的目的是什么。 元素?

HTML5中跨浏览器兼容性的最佳实践是什么? HTML5中跨浏览器兼容性的最佳实践是什么? Mar 17, 2025 pm 12:20 PM

HTML5中跨浏览器兼容性的最佳实践是什么?

See all articles