仿Flipboard 波浪折叠式Logo自定义View
来源:互联网 发布:淘宝店铺发布宝贝视频 编辑:程序博客网 时间:2024/05/17 22:31
一直在学习扔物线的Hencoder 的android教程中,其中有这么一个仿写活动,将之前在这个教程中学到关于自定义View的知识点应用下,最终在参考了仿写活动的获胜者的实现后,自己也实现了这么一个仿写,加入了一些自定义属性设置和暴露出动画执行的监听回调。
先看下原来的效果:
实现后的效果:
talk is cheap, show your code!
githup源码地址:https://github.com/DarkSherlock/FlipboardIconDemo
这个动画效果是:右半边先绕Y轴旋转45°,然后这个已经绕Y轴旋转45°后的右半边部分绕Z轴逆时针旋转270°,然后剩下的另外半边绕X轴旋转45°。
重点贴下 ondraw()里的代码就好了,有兴趣的可以去githup clone下工程,看下源码,源码不多,也加了注释,非常容易理解。
@Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); int bitmapWidth = bitmap.getWidth(); int bitmapHeight = bitmap.getHeight(); int centerX = getWidth() / 2; int centerY = getHeight() / 2; int x = centerX - bitmapWidth / 2; int y = centerY - bitmapHeight / 2; //绘制动的半边. //开始先绕Y轴旋转 targetDegreeY 度 //然后是中间波浪效果:把裁剪出来的那半边canvas旋转了targetDegreeY的那 //半边绕Z轴旋转270°, //这样因为那半边canvas是已经旋转了targetDegreeY的,所以中间波浪动画效 //果就实现了这半边扫过的部分变得凸起 //最后再绕X轴旋转targetDegreeX 度 canvas.save(); camera.save(); canvas.translate(centerX, centerY); camera.rotateY(-degreeY); canvas.rotate(-degreeZ); camera.applyToCanvas(canvas); canvas.clipRect(0, -centerY, centerX, centerY); canvas.rotate(degreeZ); canvas.translate(-centerX, -centerY); canvas.drawBitmap(bitmap, x, y, paint); canvas.restore(); camera.restore(); //绘制不动的那半边 canvas.save(); camera.save(); canvas.translate(centerX, centerY); canvas.rotate(-degreeZ); camera.rotateY(degreeFixY); camera.applyToCanvas(canvas); canvas.clipRect(-centerX, -centerY, 0, centerY); canvas.rotate(degreeZ); canvas.translate(-centerX, -centerY); canvas.drawBitmap(bitmap, x, y, paint); canvas.restore(); camera.restore(); }
其中关于自定义View onDraw()方法不熟悉的朋友,推荐一同关注扔物线大神的Hencoder教程http://hencoder.com/,一起共同提高.
阅读全文
0 0
- 仿Flipboard 波浪折叠式Logo自定义View
- 自定义View-仿Flipboard动画
- 仿360手机卫士的自定义波浪球形进度View
- 自定义view:波浪
- 自定义View 波浪
- Android自定义View之Flipboard效果
- 实现一个自定义波浪View
- Android 自定义View修炼-仿360手机卫士波浪球进度的实现
- 自定义View-圆球进度的实现(仿360波浪进度)
- android自定义View练习之波浪View
- Android使用Path自定义波浪加载View
- Android使用Path自定义波浪加载View
- 自定义View——实现波浪动画
- Android 自定义View实现波浪动画
- 仿太极图自定义view
- 新手自定义view练习实例之(二) 波浪view
- 仿 iPhone Assistivetouch 自定义view
- 自定义View仿小米钟表
- 如何实现 Service 伸缩?- 每天5分钟玩转 Docker 容器技术(97)
- mysql实现主从复制
- Android图片加载框架最全解析(五),Glide强大的图片变换功能
- 最新十大web安全隐患-四年之后,OWASP发布新版本OWASP Top10 2017
- java.io.IOException: No FileSystem for scheme: file spark hadoop
- 仿Flipboard 波浪折叠式Logo自定义View
- 修改ActionBar背景色和返回图标
- BeanUtils.copyProperties可能存空值
- define宏定义与inline内联的异同
- 使用Hudson进行持续集成
- http开启服务器
- Android 自定义圆角的实现
- 第一次当面试官
- mysql str_to_date字符串转换为日期