为了实现在透明圆环上绘制字体,查到是用canvas.drawTextOnPath()这个函数。但遗憾的是,我在手机上死活都画不出来字体。用canvas.drawPath()正常,说明path是正确的,但就是drawTextOnPath()无效。在网上搜了一堆关于canvas画图的东西,链接如下:
canvas.drawText看不到 字体
Canvas、Path 和 Paint 实例 (游戏开发必备)
Android 中 drawTextOnPath 文字效果演示(中级)
怎么实现字符串 90度旋转,使用canvas.drawText()
上面这些东西足以把canvas绘制的方方面面讲的很清除了,但我的canvas.drawTextOnPath()就是不中。后来用google查的国外盆有的一篇文章:
里面给出的解释是:
Answer
drawTextOnPath() was not supported with hardware acceleration until Android 4.1. To work around this problem, simply set a software layer type on your View when running on Android < 4.1.
Just call View.setLayerType(View.LAYER_TYPE_SOFTWARE, null). This will force software rendering and fix your problem.
原来这是android SDK的一个bug,在android4.0.3及其以下(其实是4.1版本 以下),drawTextOnPath是无效的,解决方法是在自定义ImageView的构造函数里增加这一句话:
this.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
一切就OK了!
另外还可以在Manifinest里面禁止硬件加速<applicationandroid:hardwareAccelerated="false"/>参见http://bbs.csdn.net/topics/380198530。但我不推荐这种方式,这会使所有的view包括程序中的surfaceView都禁止加速了,损失太大。
看来对于程序员,google才是最铁的战友!就一句话费我整整一天时间。。。
-----------------本文系原创,转载请注明作者:yanzi1225627
主:问题的实质是硬件加速,想多了解也可以看这里:http://architecture.riaos.com/?p=3007443
分享到:
相关推荐
本文将深入探讨Leaflet.Canvas-Markers-0.2.0,一个专门为Leaflet设计的插件,用于在地图上高效地绘制Canvas标记。 Leaflet.Canvas-Markers是Leaflet的一个扩展,它引入了一种新的标记类型,即使用HTML5 Canvas元素...
例如,如果你需要绘制多个相同形状但位置不同的对象,可以先保存初始状态,然后进行位置变换,绘制一个对象,接着调用`restore()`回到原始状态,再进行下一次变换和绘制。这样可以避免重复设置相同的绘图参数,提高...
修改html2canvas.js源码,可以解决截图不全问题.使用方式参考 http://blog.csdn.net/q2365921/article/details/54377479
在Android开发中,自定义画布Canvas是实现图形绘制的核心工具。Canvas提供了丰富的API,允许开发者在屏幕上绘制各种形状、图像以及文字等。本教程将深入探讨如何利用Canvas实现绘制和清空画布的功能。 首先,我们...
这段代码会将整个body内容渲染到一个canvas元素中,并将其添加到页面中。 5. **注意事项**: - 对于复杂布局或含有WebGL、SVG等元素的页面,可能需要额外的配置和处理。 - 图片资源的加载会影响html2canvas的...
FMX 的 Canvas 在不同的系统上会分别使用: WinVista、Win7: D2D (FMX.Canvas.D2D.pas) WinXP: GDI+ (FMX.Canvas.GDIP.pas) Mac 系列: Core Graphics (FMX.Canvas.Mac.pas) 和 HTML5 中的 Canvas 非常类似, 现在的 ...
APNG经过修改后,在QT,浏览器上可用的apng-canvas.js 参考博客使用:http://blog.csdn.net/ly305750665/article/details/77972415
开发者可能会创建一个粒子数组,每次迭代时更新每个粒子的状态,并在Canvas上绘制它们。 此外,为了提高性能和避免不必要的计算,开发者可能会采用以下优化策略: - **批次渲染**:将相似的粒子组合在一起,一次性...
前端开发 生成海报 截图等功能 1.该脚本允许您直接在用户浏览器上对网页或其部分进行“截图”。屏幕截图基于 DOM,因此可能不是 100% 准确到真实表示,因为它不会制作实际的屏幕截图,而是根据页面上可用的信息构建...
Bitmap是一个可以存储像素数据的类,我们可以将它看作是一块画布,而Canvas则是我们的画笔,用来在Bitmap上进行绘画操作。例如,我们可以通过`drawRect()`来绘制矩形,通过`drawText()`来添加文字,通过`drawBitmap...
在Android开发中,Canvas是用于在屏幕上绘制图形和文本的核心组件。Paint对象则是用来设置绘制样式,如颜色、字体、线宽等。本教程将详细讲解如何利用Paint和Canvas在Android应用中实现在竖直方向上写字。 1. **...
Canvas是Android图形绘制的基础,它可以理解为一个画布,开发者可以在上面绘制各种图形。Canvas提供了多种方法来绘制基本形状,如矩形、圆、线等,以及位图和文本。例如: - `drawRect(Rect, Paint)`:在指定矩形...
Delphi 为窗体绘制渐变背景,这里使用了Delphi中的Canvas.Brush.Color来实现窗口背景的渐变色,不错吧?如示例图的左右渐变效果,实现的代码: for i:=0 to self.Width-1 do begin c1:=GetRValue(StartColor) ...
- Canvas是Android中的一个类,它提供了在各种Surface上绘制图形的能力,如Bitmap、Window等。 - 在Android中,我们通常先创建一个Bitmap对象,然后在Bitmap上通过Canvas进行绘图。 2. **绘制方法**: - `...
**niklasvh-html2canvas-83e9b85**:这个文件名可能是html2canvas的一个特定版本,其中"niklasvh"是作者的用户名,"83e9b85"很可能是该版本的Git提交ID,代表了一次具体的代码修改。在实际项目中,选择稳定且适合...
在Android开发中,Canvas是用于在屏幕上绘制图形和图像的核心组件。`drawBitmap()`方法是Canvas的一个关键函数,用于在Canvas上绘制Bitmap图像。本文将深入解析`drawBitmap()`方法的参数及其用法,并通过实例来说明...
在Delphi编程中,`Canvas`是一个非常重要的概念,它提供了绘制图形的基本工具。本文将详细介绍Delphi中`Canvas`的基础知识及其应用场景。 #### 一、Canvas的基本概念 `Canvas`是Delphi中的一个类,它主要负责在...
在HTML5中,Canvas元素提供了一个强大的图形绘制接口,允许开发者使用JavaScript动态创建和修改图形。本主题将深入探讨如何利用JavaScript与Canvas结合,实现一个交互式的功能:拖动和缩放球体。这个功能在网页游戏...
在Android开发中,Canvas是用于在屏幕上绘制2D图形的核心组件。它允许开发者直接在Bitmap上进行绘制操作,实现各种视觉效果。以下是对标题和描述中提到的各种图形绘制方法的详细说明: 1. **点(Point)**:使用`...
- 通常,我们会在一个Bitmap对象上操作Canvas,因为Bitmap是Android中的像素存储介质,Canvas则负责在Bitmap上进行绘制操作。 - 除了Bitmap,Canvas还可以用于SurfaceView和View的onDraw()方法中,用于绘制UI组件...