自定义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>
自定义view(使用EditTetx实现记事本特效)的更多相关文章
- 自定义View(9)使用Renderscript 渲染特效。
1.渲染脚本官网 https://developer.android.com/guide/topics/renderscript/compute 2.高斯模糊 ScriptIntrinsicBlur ...
- [转]Android自定义控件三部曲系列完全解析(动画, 绘图, 自定义View)
来源:http://blog.csdn.net/harvic880925/article/details/50995268 一.自定义控件三部曲之动画篇 1.<自定义控件三部曲之动画篇(一)—— ...
- android自定义View之NotePad出鞘记
现在我们的手机上基本都会有一个记事本,用起来倒也还算方便,记事本这种东东,如果我想要自己实现,该怎么做呢?今天我们就通过自定义View的方式来自定义一个记事本.OK,废话不多说,先来看看效果图. 整个 ...
- Android自定义View(一、初体验自定义TextView)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51454685 本文出自:[openXu的博客] 目录: 继承View重写onDraw方法 自 ...
- android自定义view实现progressbar的效果
一键清理是很多Launcher都会带有的功能,其效果也比较美观.实现方式也许有很多中,其中常见的是使用图片drawable来完成的,具体可以参考这篇文章:模仿实现360桌面水晶球式的一键清理特效.本文 ...
- Android初级教程初谈自定义view自定义属性
有些时候,自己要在布局文件中重复书写大量的代码来定义一个布局.这是最基本的使用,当然要掌握:但是有些场景都去对应的布局里面写对应的属性,就显得很无力.会发现,系统自带的控件无法满足我们的要求,这个时候 ...
- Android 自定义 View 绘制
在 Android 自定义View 里面,介绍了自定义的View的基本概念.同时在 Android 控件架构及View.ViewGroup的测量 里面介绍了 Android 的坐标系 View.Vie ...
- 自定义View系列教程04--Draw源码分析及其实践
深入探讨Android异步精髓Handler 站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Andr ...
- 自定义view(一)
最近在学习自定义view 一遍看一别学顺便记录一下 1.View的测量-------->onMeasure() 首先,当我们要画一个图形的时候,必须知道三个数据:位置,长度,宽度 才能确定 ...
随机推荐
- HBase HDFS目录树
一.0.94-cdh4.2.1版本系统级别的一级目录如下,用户自定义的均在这个/hbase 下的一级子目录下/hbase/-ROOT-/hbase/.META./hbase/.archive/hbas ...
- Popwindow自定义动画(nexus5不支持暂未解决)
遇到一个问题,先记录一下 PopWindow自定义动画 import android.app.Activity; import android.graphics.drawable.BitmapDraw ...
- android监听屏幕打开关闭广播无响应的情况
android在屏幕打开和关闭的时候会发出广播,但是如果receiver配置在AndroidManifest.xml中时,receiver是接受不到任何广播的. <receiver androi ...
- windows下安装和配置mongoDB
上次在mac下安装和配置了mongodb,这次在windows下也尝试安装和配置mongodb. 1.首先下载mongodb压缩包,下载后解压到D盘或E盘.如下: 2.配置环境变量:桌面—计算机右键— ...
- JS实现页面回到顶部效果
[代码] <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF- ...
- SQL PROMPT 取消dbo前缀
SQL Prompt 无疑大大提高了开发者的效率,高效而简单,特别适合大型的数据库脚本编写,但遗憾得是至今没有可供使用的中文版本.SQL Prompt 默认对象名前面会有 dbo 前缀,在一些场合这样 ...
- 查看CentOS上Apache位置,版本,停止,启动
查看Apache是否被安装: [root@asg11 ~]# find / -name 'httpd'/etc/sysconfig/httpd/etc/httpd/etc/logrotate.d/ht ...
- LeetCode Single Number III
原题链接在这里:https://leetcode.com/problems/single-number-iii/ 题目: Given an array of numbers nums, in whic ...
- 使用sed,awk将love转换成LOVE,将CHINA转换成china
将love转换成LOVE,将CHINA转换成china echo "love CHINA" | sed -e 's/love/LOVE/' -e 's/CHINA/china/' ...
- 执行shell脚本的几种方法及区别
执行shell脚本的几种方法及区别 http://blog.csdn.net/lanxinju/article/details/6032368 (认真看) 注意:如果涉及到脚本之间的调用一定要用 . ...