当前位置: 首页 > news >正文

自定义view(使用EditTetx实现记事本特效)

先看一下效果图:

思路: 创建一个类,继承自EditText,在onDraw方法中绘制我们的下划线,通过屏幕的高度和每行控件的高度的比值得出屏幕中应该绘制多少行下划线,再来实现一些自定义的属性,设置控件基本的边距和内容边距就ok了 ,过程很简单的,代码的注释写的很详细,有需要的同学可以去阅读一下

自定义类MyNoteEditText.class

package com.wjt.day43_01_mynoteedittext;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.Gravity;
import android.widget.EditText;

public class MyNoteEditText extends EditText{
   private int lineColor = Color.RED  ;
   private int lineStrokWidth = 1 ;
   private int padding = 10 ;
	public MyNoteEditText(Context context, AttributeSet attrs) {
		super(context, attrs);
		//这句话是让每一行的输入的数据都位于他的左上部分
		setGravity(Gravity.TOP);
		
		TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyNoteEditText);
		lineColor = array.getColor(R.styleable.MyNoteEditText_lineColor, lineColor);
		lineStrokWidth = (int) array.getDimension(R.styleable.MyNoteEditText_lineStrokWidth, lineStrokWidth);
		padding = (int) array.getDimension(R.styleable.MyNoteEditText_padding, padding);
		
		array.recycle();
		
		
		//实现内容和划线部分的一一对应
		setPadding(padding, 0, padding, 0);
		
	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);
		//1,创建一个画笔
		Paint paint = new Paint();
		paint.setAntiAlias(true);
		paint.setColor(lineColor);
		paint.setStrokeWidth(lineStrokWidth);
		
		//2,获取当前整个控件的宽高
	    int viewHeight = getHeight();
		int viewWidth = getWidth() ;
		
		//3,获取EditText中每一行的宽度
		int lineHeight = getLineHeight();
		
		//4,通过计算屏幕中一共能放多少行
		int pageLineCounts = viewHeight/lineHeight ;
		
		//5,使用画布划线
		for (int i = 0; i < pageLineCounts; i++) {
			canvas.drawLine(padding, (i+1)*lineHeight, viewHeight - padding, (i+1)*lineHeight, paint);
		}
		
		//6,实现当文字写到下一页的时候继续划线
		int textLineCount =getLineCount() ; 
		
		if (textLineCount > pageLineCounts) {
			for (int i = pageLineCounts; i < textLineCount; i++) {
				canvas.drawLine(padding, (i+1)*lineHeight, viewHeight - padding, (i+1)*lineHeight, paint);
				
			}
		}
		
		
	}
}

 自定义属性部分attrs.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name = "NoteEditText">
        <attr name = "lineColor" format="color|reference"/>
        <attr name = "lineStrokeWidth" format="dimension|reference"/>
        <attr name = "padding" format="dimension|reference"/>
    </declare-styleable>
</resources>

  

 

相关文章:

  • 理解Load Average做好压力测试(转)
  • SQL Server 2008空间数据应用系列一:空间信息基础
  • mysql 触发器
  • ssh-keygen - 生成、管理和转换认证密钥
  • WPF笔记(2.9和2.10)——Layout
  • redis ins 调试
  • Oracle oradebug 命令 使用说明
  • 使用C#在VS中开发:未处理AccessViolationException “System.AccessViolationException”类型的未经处理的异常...
  • **PHP分步表单提交思路(分页表单提交)
  • mongodb 数据库操作--备份 还原 导出 导入
  • jboss部署出现MarshalOutputStream找不到错误
  • 于erlang依赖的linux调优
  • 集群RPC通信
  • session的存储方式和配置
  • VS2013和VS2008项目的互通
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • CentOS7 安装JDK
  • chrome扩展demo1-小时钟
  • export和import的用法总结
  • golang 发送GET和POST示例
  • Hexo+码云+git快速搭建免费的静态Blog
  • input的行数自动增减
  • java第三方包学习之lombok
  • Js实现点击查看全文(类似今日头条、知乎日报效果)
  • Next.js之基础概念(二)
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Spring框架之我见(三)——IOC、AOP
  • windows下如何用phpstorm同步测试服务器
  • 从零开始的webpack生活-0x009:FilesLoader装载文件
  • 解决iview多表头动态更改列元素发生的错误
  • 排序算法之--选择排序
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 双管齐下,VMware的容器新战略
  • 微信开源mars源码分析1—上层samples分析
  • 在Mac OS X上安装 Ruby运行环境
  • 正则表达式
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • # 利刃出鞘_Tomcat 核心原理解析(二)
  • # 利刃出鞘_Tomcat 核心原理解析(七)
  • #100天计划# 2013年9月29日
  • #VERDI# 关于如何查看FSM状态机的方法
  • %@ page import=%的用法
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (10)STL算法之搜索(二) 二分查找
  • (2)(2.10) LTM telemetry
  • (2)Java 简介
  • (2)STM32单片机上位机
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (solr系列:一)使用tomcat部署solr服务
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (十六)串口UART
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行