关于getChildStaticTransformation在android4.1失效问题解决方案
来源:互联网 发布:塑料袋污染 数据 编辑:程序博客网 时间:2024/06/09 21:11
问题来源:对于 Gallery 的 3D 效果大家并不陌生,如下图
此效果在 android4.0 以前可以继承 Gallery 类或 ViewGroup 类,在构造函数中设置
然后重载函数 getChildStaticTransformation 如下代码。
对于 final float offset = calculateOffsetOfCenter(child); 函数代码如下。
transformViewRoom(child, t, offset); 根据 offset 值设置 t 的不同效果值,比如 alpha 效果, 平移效果(立体效果),旋转效果,代码如下。
而后 android4.1 更改了 ViewGroup 以及 View 的相关代码,主要是把 ViewGroup 的 drawChild 的代码移到 View 里面执行。
并在调用 getChildStaticTransformation 时,不仅对 设置 setStaticTransformationsEnabled(true) 是否为 true 判断,而且加入了对 android 系统本身硬件加速是否开启 作以判断,即硬件加速开启时 getChildStaticTransformation 是没有效果的。
更要命的是 android4.1 后续版本默认开启硬件加速,即 android:targetSdkVersion 大于 15 , android:hardwareAccelerated 默认为 true。
针对此问题,个人有三个解决方案。
一、在 AndroidManifest.xml 的 application 标签里添加 android:hardwareAccelerated="false" 就 ok 了,但这样不开启硬件加速此效果在效果界面比较复杂会导致界面非常卡,不流畅。
二、利用代码中间一个小小的漏洞,通过利用 android Animation 动画绕过了此项判断。
重载 Gallery 类或 ViewGroup 类 的 drawChild 方法,具体代码如下。对 android4.1 以上的版本做特殊处理,TransformationAnimation 类为 Gallery 类或 ViewGroup 类自定义的内部类,代码如下。
此处是通过代码中判断是否有动画加以修饰,对于以上代码用起来简单,而且看起来貌似没啥问题,运行正常,只是不知道为什么其实后台一直在调用drawChild 方法,导致CPU 占有率很高,所以本人建议一般用下面方案比较靠谱。如果有人可以提出修正的方法,本人表示欢迎。
三、通过在画 child 之前对 Canvas 进行必要的变换,如上 Transformation 变换类似,重载 drawChild 方法,相关代码如下。(注:此对Android4.1及以上版本,对于4.1以下版本还是用老方法比较OK的)
以上 getTransformationMatrix(View child, float offset) 方法如下,mCamera = new Camera() & mMatrix = new Matrix() 为全局对象。注意 final int halfWidth = child.getLeft() + (child.getMeasuredWidth() >> 1); 是 child 本身的在父控件中的中心,这个非常重要,不然会变换出错,达不到想要的效果。对于以竖向排列的 child 方法类似,只是对于 child 变换中心要加以变通。另注:第三种方案在用时是对Android4.1以上版本做特殊处理的。也可以用不做特殊处理,看个人情况。特殊处理时还包含以下代码。
构造函数加
getChildStaticTransformation 如下代码
引申:由此可看出父控件 在画 child 之前,如果 对 Canvas 做一定的变换,界面就会有很好的视觉效果,比如 3D 效果等。
0 0
- 关于getChildStaticTransformation在android4.1失效问题解决方案
- 关于getChildStaticTransformation在android4.1失效问题解决方案
- 关于getChildStaticTransformation在android4.1失效问题解决方案
- 关于getChildStaticTransformation在android4.1失效问题解决方案
- 关于getChildStaticTransformation在android4.1失效问题解决方案
- 关于getChildStaticTransformation在android4.1失效导致galleryFlow错乱问题
- 关于iOS11定位失效的问题解决方案
- 关于XCode6.3.2(6D2105)的Plugin失效问题解决方案
- android4.2 gallery getChildStaticTransformation调用问题
- git bash here失效问题解决方案-win7
- IntelliJ IDEA 2017.1注册码失效问题解决方案
- intellij Idea热部署失效问题解决方案
- 关于在apache中配置error-page的问题解决方案
- 关于AES在Linux下加密解密出错问题解决方案
- 关于LCD黑屏问题解决方案
- 关于$(document).ready()失效的问题解决
- memcach高并发数据失效的问题解决方案
- RecyclerView中的item的match_parent属性失效问题解决方案。
- 液晶设计参数确定
- iOS UIButton 点击事件带多参数
- CentOS中vsftp安装、配置、卸载
- 统计Xcode的源码行数
- iOS中cookie使用
- 关于getChildStaticTransformation在android4.1失效问题解决方案
- 手撸一个Android线形图表
- 2016秋季练习
- IO案例
- 在局部坐标系上创建取向矩阵 Creating on Orientation Matrix or Local Coordinate System
- git回滚、退出等
- Paxos算法与Zookeeper分析
- js的语句判断
- ZooKeeper 数据模型