自定义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>

  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值