Android 自绘控件

由于公司项目的需求,需要绘制一条竖直的间断线作为分割线。这个可坑了爹了,以前只搞过水平的间断线,只要通过shape也可以简单的画出来,但是千万记得把hardwareAccelerated给关了,不然水平的虚线还是会是实线,这个以前也是我趟过的一个坑。那咋办呢,找不到原生的解决方案,不就是一条简单的间断线嘛,还能难住我等程序猿?这个时候,首先联想到的就是自绘控件了。

自绘控件,顾名思义就是控件所展示的内容都是我们自己绘制上去的。所有的绘制操作就是在onDraw()方法里面进行的,当然我们的这个自定义控件都是View的直接子类。比如最常使用的TextView、ImageView就是View的直接子类,也可视作自绘控件,所有的绘图操作也都是在自己的onDraw()中,有兴趣的同学绘图可以去读读这些基本控件的源码。今天第一讲,我们也动手实现我们自己的控件。

直接上代码,比较简洁。

第一步,在attrs.xml中定义控件的属性

定义line_color这个属性主要就是为了控件兼容着想,可以随意定制化间断线的颜色。

第二步、定义DashLine的成员变量

第三步、在构造方法中初始化变量

第四步、绘图

第五步、布局使用

代码比较简洁,也有注释,就不多说了。看下成果

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持我们!

(0)

相关推荐

  • Android UI开发 View自绘控件 分享

    很多时候想要设计漂亮的Android UI,使用Android自带的控件无法满足我们的需要就要考虑自绘控件,在Android界面显示类View,可以通过继承扩展重写相关方法来实现我们的图形绘制. 首先我们需要了解下View类的底层实现,在SDK中我们可以看到View直接继承于Java的基类Object,实现了图形绘制和按键事件 Drawable.Callback KeyEvent.Callback的相关方法,我们自绘时主要实现其内部的onDraw方法,相关的界面计算可以重写onMeasure方法

  • android实现图片验证码方法解析(自绘控件)

    自绘控件的内容都是自己绘制出来的 大致流程如下: 1.定义一个类继承view 1.使用TypedArray初始化属性集合     在view的构造方法中 有一个AttributeSet的参数 很明显是用来保存控件属性信息的 我们也的确可以通过循环然后用键值对的方式获取信息 而TypedArray是用来简化我们的工作的 2.重写onMeasure 测量控件大小 3.重写onDraw 绘制控件 2.根据需求在attrs文件中自定义属性 declare-styleable 声明自定义属性可以自定义一个

  • Android 自绘控件

    由于公司项目的需求,需要绘制一条竖直的间断线作为分割线.这个可坑了爹了,以前只搞过水平的间断线,只要通过shape也可以简单的画出来,但是千万记得把hardwareAccelerated给关了,不然水平的虚线还是会是实线,这个以前也是我趟过的一个坑.那咋办呢,找不到原生的解决方案,不就是一条简单的间断线嘛,还能难住我等程序猿?这个时候,首先联想到的就是自绘控件了. 自绘控件,顾名思义就是控件所展示的内容都是我们自己绘制上去的.所有的绘制操作就是在onDraw()方法里面进行的,当然我们的这个自定

  • Android编程实现控件不同状态文字显示不同颜色的方法

    本文实例讲述了Android编程实现控件不同状态文字显示不同颜色的方法.分享给大家供大家参考,具体如下: 方式一: 第一要选择的控件 <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/close_time_display" android:layout_marginRight="20

  • Android中Spinner控件之键值对用法实例分析

    本文实例讲述了Android中Spinner控件之键值对用法.分享给大家供大家参考.具体如下: 一.字典表,用来存放键值对信息 package com.ljq.activity; import java.io.Serializable; @SuppressWarnings("serial") public class Dict implements Serializable { private Integer id; private String text; public Dict()

  • Android编程布局控件之AbsoluteLayout用法实例分析

    本文实例讲述了Android编程布局控件之AbsoluteLayout用法.分享给大家供大家参考,具体如下: AbsoluteLayout是绝对布局管理器,指的是指定组件的左上角绝对坐标来指定组件的布局 <?xml version="1.0" encoding="utf-8"?> <AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"

  • 分享Android中ExpandableListView控件使用教程

    本文采用一个Demo来展示Android中ExpandableListView控件的使用,如如何在组/子ListView中绑定数据源.直接上代码如下: 程序结构图: layout目录下的 main.xml 文件源码如下: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android

  • Android 代码写控件代替XML简单实例

    Android 代码写控件代替XML简单实例 简单的一个Button控件的练习. 实现代码: Button btn = new Button(HandlerToActivity.this); LinearLayout.LayoutParams params=new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); params.gravity = Gravity.CENTER_HORIZONTAL; param

  • Android编程之控件ListView使用方法

    本文实例讲述了Android编程之控件ListView使用方法.分享给大家供大家参考.具体分析如下: 控件ListView是一个重要的控件,可以被用作用户列表等显示,下面进行它的操作测试. 下面代码实现了生成了一个ListView显示,并对每个条目的单击事件作出响应. 源代码: package com.list; import java.util.ArrayList; import java.util.HashMap; import android.app.Activity; import an

  • Android实现EditText控件禁止输入内容的方法(附测试demo)

    本文实例讲述了Android实现EditText控件禁止输入内容的方法.分享给大家供大家参考,具体如下: 问题: android如何实现EditText控件禁止往里面输入内容? 修改版解决方法: EditText editText = (EditText) findViewById(R.id.editText1); editText.setKeyListener(null); 看到这个问题大家可能有点奇怪了,EditText的功能不就是往上面写入内容吗? 再者,如果真要禁止输入文本,在布局文件中

随机推荐