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

在Abdroid屏幕中绘制虚线,最通用的是自定义控件DashedLine,再将自定义控件放入xml布局中

运行截图:

程序结构

package com.example.asus.gary_042;

import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.Path;
import android.graphics.PathEffect;
import android.util.AttributeSet;
import android.view.View;

/**
 * Created by ASUS on 2018/5/26.
 */

public class DashedLine extends View{
    public DashedLine(Context context,AttributeSet attrs) {
        super(context,attrs);
    }

    protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
        Paint paint = new Paint();
         paint.setStyle(Paint.Style.STROKE);
        paint.setColor(Color.BLACK);
        Path path = new Path();
        path.moveTo(0,200);
        path.lineTo(1280,200);
        PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);
        paint.setPathEffect(effects);
        canvas.drawPath(path,paint);
    }
}

DashedLine

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.asus.gary_042.MainActivity">

 <com.example.asus.gary_042.DashedLine
     android:id="@+id/dashedLine"
     android:layout_width="match_parent"
     android:layout_height="match_parent" />

</LinearLayout>

activity_main.xml

一、自定义控件DashedLine,使用这个控件能在屏幕中绘制一条虚线

   protected void onDraw(Canvas canvas){
        super.onDraw(canvas);
        Paint paint = new Paint();
        //给path设置样式(效果)的,STORKE设置虚线
         paint.setStyle(Paint.Style.STROKE);
        //设置虚线颜色
        paint.setColor(Color.BLACK);
        Path path = new Path();
        //起点
        path.moveTo(0,200);
        //终点
        path.lineTo(1280,200);
        //那么虚线的一个单位就是由5像素实线,5像素空白,5像素实线,5像素空白组成的虚线段。
        PathEffect effects = new DashPathEffect(new float[]{5,5,5,5},1);
        //将样式放入直线中
        paint.setPathEffect(effects);
        canvas.drawPath(path,paint);
    }

canvas.drawPath方法

Path类包含了由直线、二次曲线、三次曲线组成多种符合的集合路径图形,它可以用canvas.drawPath()来绘制,并且可以使填充的或者描边的(是基于paint的style的),并且它可以用于裁剪或者在一条path上面绘制文本。

Canvas只有drawLine方法,没有drawDashLine方法。但是你要知道,画什么虽然是Canvas决定的,但是怎么画却是由画笔Paint决定的

Paint有setPathEffect(PathEffect effect)这么一个方法,PathEffect一共有六个子类:

ComposePathEffect,

CornerPathEffect,

DashPathEffect,

DiscretePathEffect,

PathDashPathEffect,

SumPathEffect,

其中的DashPathEffect就是我们需要的虚线效果

二、在activity_main文件中引入自定义控件DashedLine

添加引用该自定义空间所在位置的绝对路径

<com.example.asus.gary_042.DashedLine>

 <com.example.asus.gary_042.DashedLine
     android:id="@+id/dashedLine"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     />

原文地址:https://www.cnblogs.com/1138720556Gary/p/9094819.html

时间: 2024-08-25 01:04:49

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

让HorizontalScrollView里某个控件占满整个屏幕

要将这个控件写到一个布局中, 然后在代码中设定宽等属性 DisplayMetrics dm = new DisplayMetrics(); //获取屏幕信息 getWindowManager().getDefaultDisplay().getMetrics(dm); screenWidth = dm.widthPixels; int screenHeigh = dm.heightPixels; 如果是item中的, 在getview中加入 LayoutParams params = new Li

Android学习Scroller(三)——控件平移划过屏幕 (Scroller简单使用)

MainActivity如下: package cc.cn; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; /** * Demo描述: * Scroller使用示例--让控件平移划过屏幕 * * 参考资料: * http://blog.cs

C#继承基本控件实现自定义控件

C#继承基本控件实现自定义控件 摘自:http://www.cnblogs.com/greatverve/archive/2012/04/25/user-control-inherit.html 自定义控件分三类:1.复合控件:基本控件组合而成.继承自UserControl2.扩展控件:继承基本控件,扩展一些属性与事件.比如继承Button3.自定义控件:直接继承自Control第一种情况上手比较容易,也比较常用,其中也有不少技巧,慢慢总结.比如要单独建个类库项目,才不会引起冲突.怎样把事件代码

asp.net用户控件和自定义控件的区别

一: Web 用户控件 1.易于创建 2.为使用可视化设计工具的使用者提供有限的支持 3. 每个应用程序中需要控件的一个单独副本 4. 不能添加到 Visual Studio 中的工具箱 5. 适用于静态布局 Web 自定义控件 1.难于创建 2. 为使用者提供完全的可视化设计工具支持 3. 仅在全局程序集缓存中需要控件的单个副本 4. 可以添加到 Visual Studio 中的工具箱 5. 适用于动态布局 二: 用户控件(UserControl) : *.ascx是指页面中加载的功能块 自定

android获取控件宽高和屏幕宽高

一.获取屏幕宽高 1.android界面简单介绍 要获取屏幕宽高,我们可以先从android的界面构成了解 android的界面主要由三部分构成:1.状态栏 2.标题栏 3.内容区域 \ (1)状态栏 状态栏主要用来显示一些系统图标,应用的通知图标和系统时间. (2)标题栏 android中标题栏主要用来显示当前位置,3.0过后添加了ActionBar,拥有了导航和OptionMenu的功能,5.0又新添加了ToolBar控件,和ActionBar类似,但自定义的空间更充足 (3)内容区域 an

MFC中给控件添加变量,DoDataExchange中

DoDataExchange函数其实是一项数据动态绑定技术.比如你在写动态按钮过程中须对按钮添加变量时,怎么添加?控件类已经写好了,其变量是已经固定的.你要添加新的变量就要用到DoDataExchange函数. 你要在对话框的构造函数里面初始化一个变量,再用DoDataExchange函数将它绑定到你的动态按扭中,比如:DDX_Check(pDX, IDC_CHECK1, m_Lesson1);这就是将m_Lesson1(这是一个外部变量,其定义在对话框的构造函数里)绑定到IDC_CHECK1中

开关控件在主流前端框架中的使用方法

本文仅介绍使用方法,后续再介绍实现方案及优劣对比. jquerymobile jqm可以使用checkbox和select模拟switch控件,只需要增加data-role='flipswitch'即可: 默认开关控件: <input type="checkbox" data-role="flipswitch" /> 若要变为选中状态,只需要增加一个checked属性即可,如下: <input type="checkbox" d

SPCOMM控件在Delphi串口通信中的应用

SPCOMM控件在Delphi串口通信中的应用 2010-07-08 22:20:31|  分类: 个人日记 |举报 |字号 订阅 2009-03-01 05:35 摘要:利用Delphi开发工业控制系统软件成为越来越多的开发人员的选择,而串口通信是这个过程中必须解决的问题之一.本文在对几种常用串口通信方法分析比较的基础上,着重讨论了Delphi开发环境下利用Spcomm控件实现PC机与单片机之间串口通信的方法,研究了Spcomm串口通信的关键技术问题,并通过一个实例给出了Spcomm控件在De

可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取)

可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) 分类: SharePoint2011-12-23 14:44 1584人阅读 评论(0) 收藏 举报 文档sharepointurl测试stringforms 可视化webpart基础开发——TreeView控件读取文档库中的所有文件夹和文件(递归方法读取) 1.在部署的sharepoint网站中新建一个名为“测试文档库”的文档库,并添加各级的子文件夹和子文件,用于测试 2.在VS2010中新建空