/**
* 自定义动画,利用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();
}
}