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

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) {}});}

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

  1. Android自定义控件实战——下拉刷新控件终结者:PullToRefreshLayout

    说到下拉刷新控件,网上版本有很多,很多软件也都有下拉刷新功能.有一个叫XListView的,我看别人用过,没看过是咋实现的,看这名字估计是继承自ListView修改的,不过效果看起来挺丑的,也没什么扩 ...

  2. Android Studio可视化时不能拖动控件至布局解决

    我新建了布局xml文件后,把之前的布局删去,并自己写了新的布局后,发现不能在Design模式也就是可视化拖动组件到布局 查了很多地方也没有插个结果,然后我就看了一下我新写的布局和之前的布局有什么区别, ...

  3. Android自定义控件之轮播图控件

    背景 最近要做一个轮播图的效果,网上看了几篇文章,基本上都能找到实现,效果还挺不错,但是在写的时候感觉每次都要单独去重新在Activity里写一堆代码.于是自己封装了一下.这里只是做了下封装成一个控件 ...

  4. android 控件高度和图片一样高,Android 根据图片宽高比例设置控件宽高

    这个方式适用于一个界面少量图片. 主要的计算公式就是得到当前控件最大的显示宽度(高度),一般填充屏幕的话,就直接取屏幕的宽度了. 得到宽度除以图片宽除以高,也可以直接得到图片宽高的比例.如下公式 这种 ...

  5. Android自定义控件传送,使用 Leanback 传输控件

    Leanback androidx 库中具有新的播放控件,可改善用户体验.对于视频应用,传输控件支持使用前进/后退控件进行视频拖动.拖动时,屏幕上会显示缩略图来帮助浏览视频. 该库中包含抽象类和开箱即 ...

  6. WPF 实现3D翻转倒计时控件~

    WPF开发者QQ群: 340500857       由于微信群人数太多入群请添加小编微信号  yanjinhuawechat 或 W_Feng_aiQ 邀请入群 需备注WPF开发者  PS:有更好的 ...

  7. Android自定义组件——3D立体旋转控件

    BingoIdea 一个3D立体切换的自定义ViewGroup demo,支持横向和纵向滑动翻转. 项目配置 在项目的build.gradle配置 allprojects {repositories ...

  8. Android自定义控件之3D上下翻页效果的倒计时控件

    这是一个自定义的倒计时控件,具有3D上下翻页翻转效果.最近项目中需要做一个倒计时控件,需要和iOS端的效果保持一样.大致效果是这样的,如下图所示: 由于暂时还不会怎么样制作gif动态图,所以想看具体效 ...

  9. 让一个图片填满一个控件_如何在Android中实现一个全景图控件(二)

    一.背景 在 如何在Android中实现一个全景图控件(一)中,介绍了项目的一些基本情况(有 demo 演示),如果项目对你有帮助,希望文章赏个赞,项目 star 一下. 项目地址:https://g ...

最新文章

  1. java字符串去掉空格
  2. java反射详解 (一)
  3. 观察多个线程同时运行|| 查看进程线程的方法——未完待续
  4. .net面试题大全,绝大部分面试题(有答案)
  5. ue4 运行禁用鼠标_[UE4] VS code使用LuaPanda断点调试
  6. django-url映射给函数给默认值
  7. 实现页面弹框背景虚化效果
  8. 【算法】剑指 Offer 56 - II. 数组中数字出现的次数 II 【重刷】
  9. 回网友:不用PPT怎么做咨询顾问?
  10. 让Win7系统屏幕来个大翻转
  11. PDF页码怎么设置?如何给PDF文件设置页码
  12. 【实用】关于Ubuntu下的对拍程序
  13. linux系统查看电脑cpu,linux系统怎么查看自己电脑的cpu位数
  14. 达里奥:我阅人无数,没有一个成功人士天赋异禀 |【经纬低调分享】
  15. Spring Boot 启动 出现异常The bean xxx could not be injected as a xx.xxxx because it is a JDK dynami
  16. 史上最小白之BM25详解与实现
  17. vue打包后dist目录直接打开index资源路径错误和css样式背景图路径问题
  18. 一个购房者的辛酸经历(纯属娱乐)
  19. Danmo 的学习之路(HTML——CSS)
  20. 第6课 Altium Designer20(AD20)+VESC6.4实战教程:绘制原理图3(北冥有鱼)

热门文章

  1. 201619101025刘洋
  2. Mac音效增强软件:Boom 3D
  3. nvm安装nodejs 运行use命令时报错exit status 1: ��û���㹻��Ȩ��ִ�д˲�����...
  4. SVG 画正六边形的进度条~奇奇怪怪的需求
  5. java数据结构之数组
  6. javaee学习之路(十五)JSP编程总结
  7. 推荐收藏,25条实用简洁的 Python 代码真香啊
  8. hr人力资源管理系统8项功能
  9. 云终端计算机系统,云终端是什么?
  10. c++rpg黑框游戏_RPG游戏 C++源码 文字RPG游戏