700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > Android自定义控件--图片3D翻转(其他控件或布局可以)

Android自定义控件--图片3D翻转(其他控件或布局可以)

时间:2018-12-26 03:37:09

相关推荐

Android自定义控件--图片3D翻转(其他控件或布局可以)

这是一个基础控件,粘贴过去就可以了

import android.graphics.Camera;import android.graphics.Matrix;import android.view.animation.Animation;import android.view.animation.Transformation;public class Rotate3dAnimation extends Animation {private final float mFromDegrees;private final float mEndDegrees;private float mDepthZ=400;private float mCenterX,mCenterY;private Camera mCamera;private boolean mReverse;public Rotate3dAnimation(float mFromDegrees, float mEndDegrees,boolean reverse) {this.mFromDegrees = mFromDegrees;this.mEndDegrees = mEndDegrees;this.mReverse = reverse;}@Overridepublic void initialize(int width, int height, int parentWidth, int parentHeight) {super.initialize(width, height, parentWidth, parentHeight);mCamera=new Camera();mCenterX=width/2;mCenterY=height/2;}@Overrideprotected void applyTransformation(float interpolatedTime, Transformation t) {float degrees=mFromDegrees+((mEndDegrees-mFromDegrees)*interpolatedTime);mCamera.save();float z;if (mReverse){z=mDepthZ*interpolatedTime;mCamera.translate(0.0f,0.0f,z);}else {z=mDepthZ*(1.0f-interpolatedTime);mCamera.translate(0.0f,0.0f,z);}final Matrix matrix=t.getMatrix();mCamera.rotateY(degrees);mCamera.getMatrix(matrix);mCamera.restore();matrix.preTranslate(-mCenterX,-mCenterY);matrix.postTranslate(mCenterX,mCenterY);super.applyTransformation(interpolatedTime, t);}}

如果想使用它就这样写,而且还是优化之后,这里是先翻转90度后再翻转90度,就是翻转180度了,为什么分两次是因为 随着翻转的角度,图像会变得很大,看着不太舒服,要解释的话,要敲好多字,算了就这样了,有空再解释。

private void initOpenAnimation() {//openAnimation 被定义成全局了,懒得粘贴了//这是一个方法,这样使用它//imageView.startAnimation(openAnimation);openAnimation = new Rotate3dAnimation(0, 90, true);openAnimation.setDuration(duration);openAnimation.setFillAfter(true);openAnimation.setInterpolator(new AccelerateInterpolator());openAnimation.setAnimationListener(new Animation.AnimationListener() {@Overridepublic void onAnimationStart(Animation animation) {}//翻转结束时@Overridepublic void onAnimationEnd(Animation animation) {Rotate3dAnimation rotate3dAnimation = new Rotate3dAnimation(90, 180, false);rotate3dAnimation.setDuration(duration);rotate3dAnimation.setFillAfter(true);rotate3dAnimation.setInterpolator(new DecelerateInterpolator());imageView.startAnimation(rotate3dAnimation);}@Overridepublic void onAnimationRepeat(Animation animation) {}});}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。