android开发 画虚线

Android自定义水平或垂直虚线效果 主要为大家详细介绍了Android自定义虚线效果,教大家如何绘制水平、垂直虚线,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 立即下载

在安卓app开发中,可能会遇到需要画虚线的时候,一般可以用shape来画。但为了操作方便,在借鉴了其他开发者的写法后,在此总结一种自定义view的方式
先上自定义view

public class DashView extends View {
    private static final String TAG = "DashView";
    public static final int DEFAULT_DASH_WIDTH = 100;
    public static final int DEFAULT_LINE_WIDTH = 100;
    public static final int DEFAULT_LINE_HEIGHT = 10;
    public static final int DEFAULT_LINE_COLOR = 0x9E9E9E;

    /**虚线的方向*/
    public static final int ORIENTATION_HORIZONTAL = 0;
    public static final int ORIENTATION_VERTICAL = 1;
    /**默认为水平方向*/
    public static final int DEFAULT_DASH_ORIENTATION = ORIENTATION_HORIZONTAL;
    /**间距宽度*/
    private float dashWidth;
    /**线段高度*/
    private float lineHeight;
    /**线段宽度*/
    private float lineWidth;
    /**线段颜色*/
    private int lineColor;
    private int dashOrientation;

    private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
    private int widthSize;
    private int heightSize;

    public DashView(Context context) {
        this(context,null);
    }

    public DashView(Context context, AttributeSet attrs) {
        super(context, attrs);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.DashView);
        dashWidth = typedArray.getDimension(R.styleable.DashView_dashWidth,DEFAULT_DASH_WIDTH);
        lineHeight = typedArray.getDimension(R.styleable.DashView_lineHeight, DEFAULT_LINE_HEIGHT);
        lineWidth = typedArray.getDimension(R.styleable.DashView_lineWidth, DEFAULT_LINE_WIDTH);
        lineColor = typedArray.getColor(R.styleable.DashView_lineColor, DEFAULT_LINE_COLOR);
        dashOrientation = typedArray.getInteger(R.styleable.DashView_dashOrientation,DEFAULT_DASH_ORIENTATION);
        mPaint.setColor(lineColor);
        mPaint.setStrokeWidth(lineHeight);
        typedArray.recycle();
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        widthSize = MeasureSpec.getSize(widthMeasureSpec)-getPaddingLeft()-getPaddingRight();
        heightSize = MeasureSpec.getSize(heightMeasureSpec - getPaddingTop() - getPaddingBottom());
        Log.d(TAG, "onMeasure: "+widthSize+"----"+heightSize);
        Log.d(TAG, "dashOrientation: "+dashOrientation);
        if(dashOrientation == ORIENTATION_HORIZONTAL){
            //不管在布局文件中虚线高度设置为多少,虚线的高度统一设置为实体线段的高度
            setMeasuredDimension(widthSize, (int) lineHeight);
        }else{
            setMeasuredDimension((int) lineHeight, heightSize);
        }

    }

    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        switch (dashOrientation){
            case ORIENTATION_VERTICAL:
                drawVerticalLine(canvas);
                break;
            default:
                drawHorizontalLine(canvas);
        }
    }

    /**
     * 画水平方向虚线
     * @param canvas
     */
    public void drawHorizontalLine(Canvas canvas){
        float totalWidth = 0;
        canvas.save();
        float[] pts = {0,0,lineWidth,0};
        //在画线之前需要先把画布向下平移办个线段高度的位置,目的就是为了防止线段只画出一半的高度
        //因为画线段的起点位置在线段左下角
        canvas.translate(0,lineHeight/2);
        while(totalWidth<=widthSize){
            canvas.drawLines(pts,mPaint);
            canvas.translate(lineWidth + dashWidth,0);
            totalWidth += lineWidth + dashWidth;
        }
        canvas.restore();
    }

    /**
     * 画竖直方向虚线
     * @param canvas
     */
    public void drawVerticalLine(Canvas canvas){
        float totalWidth = 0;
        canvas.save();
        float[] pts = {0,0,0,lineWidth};
        //在画线之前需要先把画布向右平移半个线段高度的位置,目的就是为了防止线段只画出一半的高度
        //因为画线段的起点位置在线段左下角
        canvas.translate(lineHeight/2,0);
        while(totalWidth<=heightSize){
            canvas.drawLines(pts,mPaint);
            canvas.translate(0,lineWidth + dashWidth);
            totalWidth += lineWidth + dashWidth;
        }
        canvas.restore();
    }
}

代码中用到了自定义属性,在res的values中新建attrs.xml,编写如下:

 <!--画虚线-->
    <declare-styleable name="DashView">
        <attr name="dashWidth" format="dimension"/>
        <attr name="lineWidth" format="dimension"/>
        <attr name="lineHeight" format="dimension"/>
        <attr name="lineColor" format="color"/>
        <attr name="dashOrientation" format="integer"/>

    </declare-styleable>

配置完成,在布局中调用即可

 <DashView
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:layout_marginLeft="10dp"
      android:layout_marginRight="10dp"
      app:dashWidth="2dp"
      app:lineWidth="4dp"
      app:lineColor="@color/DashView_line_color"
      app:dashOrientation="0"
      app:lineHeight="1dp"/>

其中,属性介绍:
dashWidth:两段线段之间的间距
lineWidth:每条线段宽度
lineColor:线段颜色
dashOrientation:虚线方向 0,水平,1,竖直
lineHeight:线段高度

注意:注意事项 当设定虚线的方向时,对应方向的wrap_content显示效果为match_parent,因为在实际情况中,虚线的尺寸总是固定的数值。

再次注意:本文是在其他开发者代码的基础上进行整理的,我感觉好用并且实用,比找美工给切一个虚线的图片要省内存。现在附上原作者博客链接和git地址
csdn: http://blog.youkuaiyun.com/small_lee/article/details/52153557
github: https://github.com/SmallLee/DashView

再次感谢 原作者!

对雷达中相位补偿概念的一些理解 基于多普勒相位补偿的速度扩展方法和DBF测角,两者本质上都是对相位进行补偿。 阅读详情

相关推荐

从零到一:移远EC200UCN_LA OpenCPU开发中的‘避坑’实战指南

本文详细介绍了移远EC200UCN_LA 4G通信模块的OpenCPU开发实战指南,涵盖开发环境搭建、项目构建、通信接口开发、调试技巧及固件升级等关键环节。通过避坑经验和实用技巧,帮助开发者高效完成二次开发,提升4G通信模块的应用开发效率。

weixin_29159711的博客 504

探索DashView:一款高效的数据可视化框架

探索DashView:一款高效的数据可视化框架 本文将向您介绍一个名为DashView的开源项目,它是一个基于Python的轻量级数据可视化框架。通过简单易用的API, DashView使得开发人员能够快速构建交互式且美观的数据仪表板。如果您是数据科学家、工程师或对数据可视化感兴趣的任何人,那么DashView可能是您的理想选择。 项目简介 是由开发者 SmallLee 创建的一个项目,它的目标是...

gitblog_00062的博客 444

破解拼多多网页字体加密的Python实现(静态)

爬取或者复制粘贴出来发现数字不是6372,而是这样的一个东西 ""从上图我们可以看出数字是一行的空白,后面被浏览器渲染后才展现的数字。我们可以用这个代码查看十六位进制对应的十进制,为什么要看十进制呢?​,而字体文件中的字符映射关系(cmap)也是以十进制存储的。我们搜索这个属性我们可以看到第一个这样的属性有一个URL,这个就是解密的字体包。然后我们构造一个这样的映射字典 key就是对应的十进制,后面的值就是对应的数字。然后我们需要封装一个函数,将加密文字和映射字典传入,返回解密后的数字。

weixin_64179111的博客 3539

虚线

compile 'com.fang:dashview:v1.0.0'//虚线     &lt;com.fang.dashview.DashView android:id="@+id/view" android:layout_width="wrap_content" android:layout_height="match_parent" android:l...

qiaoxianzhu的博客 352

BRAM在图像处理缓存中的实现:完整示例解析

深入讲解如何利用BRAM高效实现图像处理中的数据缓存,结合实际案例解析BRAM的应用优势与设计细节,提升系统性能。

weixin_29443363的博客 333

从Canny到深度学习:边缘检测指标进化史(含ODS/OIS/AP的数学推导)

本文系统梳理了边缘检测评估指标的演进历程,从经典的Canny算子到深度学习时代,重点解析了ODS、OIS和AP三大核心指标的设计哲学与数学推导。文章深入探讨了基于PR曲线的评估体系,揭示了不同指标(如ODS与OIS)在阈值优化上的差异,并分析了AP指标在边缘检测任务中的优势与局限,为算法研究和模型评估提供了实用指南。

b9c0d的博客 199

android绘制虚线

自定义view绘制虚线 在某些手机上绘制虚线无效,始终显示为实线。

gengbaolong的博客 2272

Pytest 常见问题及其解决方案

Pytest 是一个强大且灵活的测试框架,但初学者在使用过程中难免会遇到各种问题。希望通过这篇文章,你能更好地应对常见的挑战,写出更高效、更稳定的测试代码。测试不是负担,而是保障。写好测试不仅能提高代码质量,还能让你在面对变更时更加从容自信。

qq_52137592的博客 899

Android绘制竖直虚线完美解决方案—自定义View

虚线

QG 2851

【同等学力】01-逻辑符号表达

F(x): x是确诊者,G(x):x有症状F(x): x是老人,G(x):x是宠物,L(x,y): x喜欢y。

super_mochi1 1880

R语言中的Gamma分布函数

在R语言中,我们可以使用最大似然估计(Maximum Likelihood Estimation,MLE)或最小二乘估计(Least Squares Estimation,LSE)等方法来估计Gamma分布的参数。本文介绍了在R语言中使用Gamma分布函数的基本操作,包括生成随机变量、计算概率密度函数和累积分布函数,以及参数估计和拟合。函数来生成Gamma分布的随机变量,计算概率密度函数(PDF)和累积分布函数(CDF),以及进行参数估计和拟合。要计算Gamma分布的累积分布函数(CDF),我们可以使用。

ByteWhiz的博客 1629

Android实现横/竖直虚线(附带源码)

Android实现横/竖直虚线(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 2705

固定效应模型-以stata为工具

固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学和健康研究中被广泛应用。

侯小啾技术博客 2837

安卓开发画虚线

一、使用shape<TextView android:layout_marginTop="50dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@drawable/shape_dash_line

ithouse的专栏 2500

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

android开发中解决shape画虚线时,在手机上显示实线的问题

使用shape绘制虚线时,在xml布局中显示的是虚线,在手机上运行起来却是实线,网上说是android4.0以上默认把Activity的硬件加速打开了,在Manifest.xml中关掉即可 android:hardwareAccelerated="false" 试了之后发现没效果,最终的解决方案是在view中把layerType设置成software

仙榭居 1776

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

在Android的UI开发中,有时为了界面美观而需要使用虚线。在这里我自己实现一个画虚线的控件。

package com.custom; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint; import andro

727

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

android 开发画虚线、实线,画圆角矩形,一半圆角

1、画虚线,实线: 建立dotted_line_gray.xml文件放在drawable文件夹下面。 android:shape="line" 可以修改你想要的形状 [html] view plaincopy xml version="1.0" encoding="utf-8"?>   shape xmlns:android

u011895534的博客 1263

android开发步步为营之94:使用PathEffect画虚线和虚线框

package com.figo.study.activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.DashPathEffect; import android.graphics.Paint;

飞在江湖的专栏 2142

Android开发 GradientDrawable详解

Android开发 GradientDrawable详解 前言   GradientDrawable类似与Xml布局里的shape,常用在一些自己封装的对话框控件的背景或者其他View中,优势是不需要你在带着xml布局文件一起封包.. 画线 ...

weixin_30655569的博客 671

Android 自定义View 基础篇 画虚线 三角 Paint Style Paint Join 对勾 完成按钮 此篇下部分为Android开发自定义控件

Paint.Style.STROKE 只绘制图形轮廓(描边) Paint.Style.FILL 只绘制图形内容 Paint.Style.FILL_AND_STROKE 既绘制轮廓也绘制内容 Paint.Join.BEVEL 斜边Paint.Join.MITER 锐角Paint.Join.ROUND 圆角 圆的 public class CircleView e...

FlyPig_Vip的博客 621

Android开发:Shape

Android开发:Shape详细解读  日常开发中,我们会遇到一些Button、Textview...等控件的背景是圆角矩形、圆形...等,和android默认的控件背景矩形不一致,此时shape的作用就体现出来了,我们可以根据shape属性画出很多我们意想不到的背景图案,下面我会把所有shape的属性都介绍一下。 1  shape标签:     android:shape:       recta...

weixin_45532772的博客 508

android开发中遇到的问题

7.ExpandableListView setOnChildClickListener无效,请在adapter的方法isChildSelectable返回true即可 6.使用<shape/>画虚线无效。从android3.0开始,安卓关闭了硬件加速功能,所以就不能显示了,所以就是在AndroidManifest.xml,或者是在activity中把硬件加速的功能关掉就可以了an...

weixin_30701521的博客 86

Android利用shape画虚线

我们知道,想在Android xml中画出一条直线,很简单: <View android:layout_width="match_parent" android:layout_height="1px" android:background="@color/fragment_mine_line_color"/> 如果想要画出一条虚线呢? 在drawable目录

2万+

android 绘制自定义控件

public class DashedLine extends View{ private final String namespace = "http://com.smartmap.driverbook"; private float startX; private float startY; private float endX; private float

晓剑 738
上一篇: android7.0调用相机拍照的问题解决方案
下一篇: 微信小程序开发遇到的坑
BruceeLeee
博客等级 码龄11年 5粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值