Android虚线可绘制潜在ICS错误

Posted

技术标签:

【中文标题】Android虚线可绘制潜在ICS错误【英文标题】:Android dashed line drawable potential ICS bug 【发布时间】:2012-06-06 06:55:58 【问题描述】:

以下是虚线,在 XML 中定义为 ShapeDrawable:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="line">

    <size
        android:
        android: />

    <stroke
        android:
        android:color="@android:color/black"
        android:dashWidth="1dp"
        android:dashGap="2dp" />

</shape>

这将在几部 Gingerbread 手机上绘制一条漂亮的虚线。然而,在 Galaxy Nexus 上,破折号似乎被忽略了,形状被绘制为一条连续的线。更奇怪的是,运行 ICS 的模拟器会正确地用破折号渲染它,这只是物理设备搞砸了。

我是否遗漏了一些明显的东西?或者这真的是 Android 4.0 的错误吗?这条线在几个地方使用。这是一个 ImageView 示例:

<ImageView
    android:layout_
    android:layout_
    android:layout_marginLeft="@dimen/observation_observe_side_margin"
    android:layout_marginRight="@dimen/observation_observe_side_margin"
    android:layout_marginTop="16dp"
    android:contentDescription="@string/dotted_line_description"
    android:src="@drawable/dotted_line" />

【问题讨论】:

我在 Galaxy Nexus 上的应用中发现了同样的问题。在我的其他设备 2.x 设备上,它显示为虚线。 重复***.com/a/26296229/185022 Dotted line is actually not dotted when app is running on real Android device的可能重复 【参考方案1】:

http://code.google.com/p/android/issues/detail?id=29944 记录的问题有一条评论,将以下内容应用于您的视图:

view.setLayerType(View.LAYER_TYPE_SOFTWARE, null)

这对我有用。

【讨论】:

请注意,如果您不想以编程方式编辑视图,也可以将属性 android:layerType="software" 添加到 XML 定义中。 API 11+ developer.android.com/reference/android/view/… 所以在问题的例子中。你会将android:layerType="software" 设置为ImageView 还是shape 我会在 ImageView 上做【参考方案2】:

此问题记录在这里http://code.google.com/p/android/issues/detail?id=29944关闭硬件加速将显示虚线。

【讨论】:

不幸的是,这使我的表现恶化了大约 500%。有什么办法可以防止这种情况发生吗? 不要关闭硬件加速。 CardView 将失去它的影子:***.com/questions/43406938/…。

以上是关于Android虚线可绘制潜在ICS错误的主要内容,如果未能解决你的问题,请参考以下文章

Android设置虚线圆角渐变

Android可绘制背景角不删除

Android Shape绘制虚线在手机端查看是实线的问题

Android_(控件)使用自定义控件在屏幕中绘制一条虚线

创建一个不透明的可绘制波纹

调整可绘制图层列表内的位图大小 2