Android虚线绘制,图形硬件加速

问题:

至于如何绘制虚线就不多说了,网上比比皆是,谈下这次开发碰到的问题:

1.从Android3.0开始,Android 2D的绘制流程就设计为能够更好地支持硬件加速。使用GPU的View在Canvas上进行画的操作时都会使用硬件加速。但是这样当我们定义shape绘制虚线时候,会发现绘制的并不是虚线而是一条实现。

当时搜了下解决办法,毫不犹豫直接在application属性上标记

<applicationandroid:hardwareAccelerated="true" ...>

问题来了,发现关闭硬件加速后,listview滑动就闪屏。显然我们不能再application级别来关闭硬件加速,因为可能会影响其他页面的效果。

解决办法:

Activity级别

如果你的应用程序不能在Application应用级别表现良好的话,则可以使用对Activity进行单独控制。要启动或者禁用一个Activity的硬件加速,你可以使用activity的android:hardwareAccelerated属性。下面的一个列子使整个Application启用硬件加速,但是对一个Activity禁止使用硬件加速。

<application android:hardwareAccelerated="true">
 <activity .../>   <activity android:hardwareAccelerated="false" />
</application>


 View级别

我们可以对单独的View在运行时阶段禁用硬件加速。我们可以使用如下代码:

myView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

注意:现阶段不能够在View级别进行硬件加速。

时间: 2024-08-17 15:01:02

Android虚线绘制,图形硬件加速的相关文章

Android应用程序UI硬件加速渲染环境初始化过程分析

在Android应用程序中,我们是通过Canvas API来绘制UI元素的.在硬件加速渲染环境中,这些Canvas API调用最终会转化为Open GL API调用(转化过程对应用程序来说是透明的).由于Open GL API调用要求发生在Open GL环境中,因此在每当有新的Activity窗口启动时,系统都会为其初始化好Open GL环境.这篇文章就详细分析这个Open GL环境的初始化过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! Open

Android应用程序UI硬件加速渲染技术简要介绍和学习计划

Android系统的流畅性一直被拿来与iOS比较,并且认为不如后者.这一方面与Android设备硬件质量参差不齐有关,另一方面也与Android系统的实现有关.例如在3.0前,Android应用程序UI绘制不支持硬件加速.不过从4.0开始,Android系统一直以"run fast, smooth, and responsively"为目标对UI进行优化.本文对这些优化进行简要介绍和制定学习计划. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注!

Android应用程序UI硬件加速渲染的Display List渲染过程分析

在硬件加速渲染环境中,Android应用程序窗口的UI渲染是分两步进行的.第一步是构建Display List,发生在应用程序进程的Main Thread中:第二步是渲染Display List,发生在应用程序进程的Render Thread中.Display List的渲染不是简单地执行绘制命令,而是包含了一系列优化操作,例如绘制命令的合并执行.本文就详细分析Display List的渲染过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 从前面An

Android应用程序UI硬件加速渲染的预加载资源地图集服务(Asset Atlas Service)分析

我们知道,Android系统在启动的时候,会对一些系统资源进行预加载.这样不仅使得应用程序在需要时可以快速地访问这些资源,还使得这些资源能够在不同应用程序之间进行共享.在硬件加速渲染环境中,这些预加载资源还有进一步优化的空间.Android系统提供了一个地图集服务,负责将预加载资源合成为一个纹理上传到GPU去,并且能够在所有的应用程序之间进行共享.本文就详细分析这个预加载资源地图集服务的实现原理. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 资源预加载

Android应用程序UI硬件加速渲染的Display List构建过程分析

在硬件加速渲染环境中,Android应用程序窗口的UI渲染是分两步进行的.第一步是构建Display List,发生在应用程序进程的Main Thread中:第二步是渲染Display List,发生在应用程序进程的Render Thread中.Display List是以视图为单位进行构建的,因此每一个视图都对应有一个Display List.本文详细分析这些Display List的构建过程. 老罗的新浪微博:http://weibo.com/shengyangluo,欢迎关注! 这里说的D

Android应用开发:图形绘制之硬件加速

引言 在Android3.0后,Android的2D渲染通道开始支持硬件加速,也就是说所有View的Canvas绘画动作都会使用GPU,同时也代表着应用程序会损耗更多的内存.而在Android4.0(API14)之后硬件加速功能就被默认开启了.如果你的应用程序是由各种标准View和Drawable组成的,那么硬件加速并不会引起任何不适.众所周知,使用硬件加速会调用到OpenGL,但是OpenGL不同版本会存在不支持一些操作的情况,也就是说,硬件加速可能会影响一些自定义View及绘制过程.因此,A

Android不同层次开启硬件加速的方式(转)

在Android中,可以四给不同层次上开启硬件加速: 1.应用:<application android:hardwareAccelerated="true"> 2.Activity<activity android:hardwareAccelerated="true">3.WindowgetWindow().setFlags(WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED, Wind

[转]Android中不被硬件加速支持的操作

开启硬件加速之后,Android中的2D渲染管道可以支持绝大部分常用的Canvas的绘画操作函数以及那些很少被使用的操作函数.所有的那些用来呈现Android中的应用程序的绘画操作.默认的部件和布局以及常见的高级视觉效果(比如反射和纹理)都被支持.以下列表是已知的不被硬件加速所支持的操作:* Canvas     ** clipPath()     ** clipRegion()     ** drawPicture()     ** drawTextOnPath()     ** drawVe

Android学习绘制图形

Android的绘图继承于View组件,重写onDraw(Canvas canvas) 方法时涉及一个绘图API: Canvas 代表了依附于指定View的画布,并且提供了很多绘制方法. Canvas提供的方法还涉及一个API: Paint ,Paint代表了Canvas上的画笔,主要用于设置绘制风格,画笔颜色,粗细,填充风格等. Path代表任意多条直线连接而成的任意图形,当Canvas根据Path绘制图形时,它可以绘制出任意形状的图形. ? 1 2 3 4 5 6 7 8 9 10 11 1