自定义view(使用EditTetx实现记事本特效)
2015-11-12 00:02
441 查看
先看一下效果图:
思路: 创建一个类,继承自EditText,在onDraw方法中绘制我们的下划线,通过屏幕的高度和每行控件的高度的比值得出屏幕中应该绘制多少行下划线,再来实现一些自定义的属性,设置控件基本的边距和内容边距就ok了 ,过程很简单的,代码的注释写的很详细,有需要的同学可以去阅读一下
自定义类MyNoteEditText.class
自定义属性部分attrs.xml
思路: 创建一个类,继承自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>
相关文章推荐
- JavaScript日期时间对象的创建与使用(三)
- Subclipse中的一些状态
- MindMapper中的主题该怎样进行修改
- 通过RS232发送和接收短信(三)
- js 获取当前url的参数
- 使用Supervisor守护Python进程
- ZBrush®UV如何制作
- 设计模式6大原则:里氏置换原则
- 蜂窝教育:Android与iOS平分天下
- 回声客户端的实现
- 实现迭代服务端和客户端
- 自定义适配器
- sencha cmd项目主题修改
- 面向对象程序设计上机练习十二(运算符重载)
- window 安装 pip 链接
- 如何在终端中启动程序到后台运行
- Web 安全渗透学习路线
- 安全网站推荐
- Web 安全渗透学习路线----1Web安全相关概念
- 时间戳