美文网首页
Android 解决使用 shape 绘制虚线失败的问题

Android 解决使用 shape 绘制虚线失败的问题

作者: 渊祥 | 来源:发表于2017-08-05 14:26 被阅读0次

DashedLine

Github 地址:https://github.com/SenhLinsh/DashedLine

前言

一般情况下, 我们在布局绘制实线和虚线, 可以使用shape来作为View的背景来实现.

  • 实线
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="line">
    <stroke
        android:width="3dp"
        android:color="@color/colorPrimary"/>
</shape>
  • 虚线
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="line">
    <stroke
        android:width="3dp"
        android:color="@color/colorPrimary"
        android:dashGap="3dp"
        android:dashWidth="5dp"/>
</shape>

这个方法绘制实线的时候是没问题的,但是在绘制虚线时,很可能无法绘制成功。因为使用shape绘制虚线需要开启硬件加速。

当然,有些人觉得那就开启硬件加速呗,但是开启硬件加速是有利有弊的,在没有必要开启的时候,我们完全可以尝试另外的方法,那就是自定义View。

本项目就是在上诉的情况下建立的。当然,不仅仅于绘制直虚线,还有绘制圆形虚线的控件,以及后续可能继续开发的具有更多使用实用效果的虚线控件。

效果

绘制直线虚线和圆形虚线的效果如下:

使用 DashedLine 绘制虚线效果使用 DashedLine 绘制虚线效果

XML代码:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical">

    <com.linsh.dashedline.DashedCircleLine
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_gravity="center"
        app:dashColor="@color/colorPrimary"
        app:dashGap="35dp"
        app:dashWidth="2dp"
        app:strokeWidth="20dp"/>

    <com.linsh.dashedline.DashedLine
        android:layout_width="80dp"
        android:layout_height="10dp"
        android:layout_marginTop="10dp"
        app:dashColor="@color/colorPrimary"
        app:dashGap="5dp"
        app:dashOrientation="horizontal"
        app:dashWidth="5dp"
        app:strokeWidth="2dp"/>

    <com.linsh.dashedline.DashedLine
        android:layout_width="10dp"
        android:layout_height="100dp"
        app:dashColor="@color/colorPrimary"
        app:dashGap="5dp"
        app:dashOrientation="vertical"
        app:dashWidth="5dp"/>

    <com.linsh.dashedline.DashedCircleLine
        android:layout_width="20dp"
        android:layout_height="20dp"
        android:layout_gravity="center"
        app:dashColor="@color/colorPrimary"
        app:dashGap="1dp"
        app:dashWidth="2dp"
        app:strokeWidth="1dp"/>

</LinearLayout>

使用方法

attr属性 说明
dashColor 虚线颜色
dashGap 虚线间隔
dashWidth 单个虚线长度
strokeWidth 虚线宽度
dashOrientation 虚线方向 (horizontal--横, vertical--竖)

相关文章

网友评论

      本文标题:Android 解决使用 shape 绘制虚线失败的问题

      本文链接:https://www.haomeiwen.com/subject/mcoilxtx.html