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 1-4 Canvas 对绘制的辅助

声明:内容转载自HenCoder(www.hencoder.com) 感谢大神扔物线 1 范围裁切 范围裁切有两个方法: clipRect() 和 clipPath()。裁切方法...
  • qqqq245425070
  • qqqq245425070
  • 2018年01月16日 09:53
  • 30

关于对Canvas.ZIndex的认识误区

http://www.cnblogs.com/slmk/archive/2011/11/07/2238832.html 就是说:附加属性可以用在任何的元素上面。...
  • czs8585
  • czs8585
  • 2011年11月09日 11:21
  • 1065

Chrome中canvas上drawImage无法画出image的解决办法

在自己写demo的过程中 碰到了这样一个问题 发现drawImage方法没有达到预期的效果 图片没办法显示 而fillRect等画图形的方法却工作良好 大概的代码如下: J...
  • awe5566
  • awe5566
  • 2014年02月03日 23:15
  • 4083

HTML5,canvas中的线型属性lineCap设置之后没有效果!

HTML5,canvas中的线型属性lineCap设置之后没有效果!
  • bem_zj
  • bem_zj
  • 2016年10月23日 22:38
  • 815

HTML5-canvas擦除无效

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

Canvas相关的一些问题——画圆

1.在Canvas中绘制圆形的时候可能会出现一些问题, 例如下面的代码,想实现一个圆和一个半圆的效果 运行代码后,会有如下效果: 你会发现两张图都是圆,如果把第二个图的角度改为60度,依然是如...
  • luohuaxinyue
  • luohuaxinyue
  • 2016年03月15日 17:34
  • 736

用canvas做图像遮罩---globalCompositeOperation 属性

globalCompositeOperation属性的官方解释:http://www.w3school.com.cn/tags/canvas_globalcompositeoperation.asp ...
  • qq_30668579
  • qq_30668579
  • 2016年05月25日 10:19
  • 2844

关于HTML5中Canvas的宽、高设置问题

Canvas元素默认宽 300px, 高 150px, 设置其宽高可以使用如下方法: 方法一: 1 方法二:使用HTML5 Canvas API操作 OK 1 var canvas = docume...
  • mochong
  • mochong
  • 2017年03月28日 14:07
  • 413

一个canvas中strokeStyle的疑问

Canvas body{margin:20px auto; padding:0; width:800px; } canvas{border:dashed 2px #CCC} ...
  • huahua1208
  • huahua1208
  • 2016年02月03日 11:13
  • 1201

android 抗锯齿效果(Paint方式、Canvas方式)

在画图的时候,图片如果旋转或缩放之后,总是会出现那些华丽的锯齿。其实Android自带了解决方式。     方法一:给Paint加上抗锯齿标志。然后将Paint对象作为参数传给canvas的绘制方法...
  • wjw_java
  • wjw_java
  • 2013年11月14日 14:09
  • 3189
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:camera.applyToCanvas(canvas)无效
举报原因:
原因补充:

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