camera.applyToCanvas(canvas)无效

原创 2015年07月08日 15:42:33

        在自定义view中用到了canera的3D效果,可是camera.applyToCanvas(canvas)在4.3以下的系统中不起作用。比较了下源码,查了一些资料发现了问题所在。

        在网上查到的资料说4.3以下如果启用了硬件加速渲染,则3D效果不起作用

public void applyToCanvas(Canvas canvas) {
        if (canvas.isHardwareAccelerated()) {
            if (mMatrix == null) mMatrix = new Matrix();
            getMatrix(mMatrix);
            canvas.concat(mMatrix);
        } else {
            nativeApplyToCanvas(canvas.getNativeCanvasWrapper());
        }
    }
上面为4.4源码

public void applyToCanvas(Canvas canvas) {
        nativeApplyToCanvas(canvas.mNativeCanvas);
    }
上面为4.1源码,4.2,4.3基本一致

通过比较源码可以看到4.4在硬件加速情况下camera.applyToCanvas(canvas)实现方式为

if (canvas.isHardwareAccelerated()) {
            if (mMatrix == null) mMatrix = new Matrix();
            getMatrix(mMatrix);
            canvas.concat(mMatrix);
        }
所以解决方法就是在4.3以下硬件加速的情况下使用canvas.concat(mMatrix);而不是camera.applyToCanvas(canvas)




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

自定义View系列教程04--Draw源码分析及其实践

通过之前的详细分析,我们知道:在measure中测量了View的大小,在layout阶段确定了View的位置。  完成这两步之后就进入到了我们相对熟悉的draw阶段,在该阶段真正地开始对视图进行绘制。...

HTML5-canvas擦除无效

HTML5-canvas擦除无效 部分安卓手机上会出现canvas内图表重叠,并且清除无效,属于偶现缺陷,非常难以确定其产生原因,比如下图这个样子,第一次绘制的图形没有擦除,导致第二次绘制时出现重影:...

Unity的优化系列4 - 最好使用Canvas Overlay代替Screen Space Camera

孙广东  2016.5.23<img width="176" height="153" alt="计算机生成了可选文字: " src="data:image/png;base64,iVBORw0KGg...

将图像无效值设置为NAN

Glide使用探索(二)——磁盘缓存无效化

Glide磁盘缓存无效化
  • dcsff
  • dcsff
  • 2017-03-02 15:50
  • 704

设置窗体关闭按钮无效

  • 2013-03-06 19:48
  • 530B
  • 下载

CSS属性:vertical-align:middle,设置为什么无效!

最近,在学习CSS中,每次对一个页面进行排版的时候,总是需要对文字居中,每次在div里面设置text-align和vertical-algin两个属性就会以为他会居中! 废话不多说了!直接上代码! 图...

singleTask无效 (Nubia)apk

  • 2015-08-21 18:03
  • 227KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)