Android之自定义TextView
来源:互联网 发布:网络大专文凭找工作 编辑:程序博客网 时间:2024/04/28 20:54
TextView是继承View的,在View的基础上通过onDraw()来绘画,自定义TextView也就是实现改变TextView的大小和文字的显示方式以及填充等
先来实现一个简单的给TextView加边框,在onDraw()中书写,会自动调用onDraw()方法
package com.example.administrator.listviewtop;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.util.AttributeSet;import android.widget.TextView;/** * Created by Administrator on 2016/9/11. */public class TestView extends TextView { private Paint paint1,paint2,paint3; public TestView(Context context) { super(context); init(); } public TestView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public TestView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ //新建画笔 paint1=new Paint(); //设置颜色,这个里面的getColor是被弃用的,用下面的 paint1.setColor(getResources().getColor(android.R.color.holo_blue_light)); //样式为全部填充 paint1.setStyle(Paint.Style.FILL); paint2 =new Paint(); paint2.setColor(Color.YELLOW); paint2.setStyle(Paint.Style.FILL); paint3=new Paint(); paint3.setColor(Color.WHITE); paint3.setStyle(Paint.Style.FILL); } @Override protected void onDraw(Canvas canvas) { //画TextView的外边框 canvas.drawRect(0, 0, getMeasuredWidth(), getMeasuredHeight(), paint1); //画TextView的内边框 canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, paint2); //只是想画个边框,使用填充后导致整个屏幕都是 canvas.drawRect(20,20,getMeasuredWidth()-20,getMeasuredHeight()-20,paint3); //保存当前的画板 canvas.save(); //平移10像素,在父类的onDraw前 canvas.translate(10, 0); //TextView父类自己的逻辑 super.onDraw(canvas); //将原来的画板取出 canvas.restore(); } //效果就是设置TextView的长度 @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { setMeasuredDimension(200,100); }}
说一下这个onDraw()方法,我用了三个画笔,都使用的是FILL,本来想使用STROKE,但是线太细,没有填充的效果,使用FILL,连里层的也变了,于是就在里层加了一个画笔,将其画成白色,这样就显示出了两个边框的效果,而且内层为白色
其中有一个方法canvas.translate(10,0)是平移操作,为了不让文字显示和边框重叠;也可以在布局中将gravity设置为center,就不用使用translate了
还有一个问题,就是这些自定义操作是在super.onDraw()前呢,还是后面的问题
于是我将super.onDraw()前面的代码全部放到后面,效果中没有显示在布局中设置的text文本,其中的逻辑是,父类先执行布局文件的操作,包括文本的显示,然后自定义的操作使用的是FILL,将父类的实现给覆盖了,因此文本信息不会显示
由上面的说来,自定义的操作一般放在super.onDraw()前面
上面的onMeasure()方法重写,直接设置指定的长宽
1 0
- Android之自定义TextView
- Android自定义控件之TextView
- Android自定义控件之TextView
- Android自定义控件之TextView
- Android自定义组件之TextView
- android自定义之可滚动的TextView
- Android之——自定义TextView
- Android自定义控件之extends textview
- Android自定义控件之拓展TextView(ExpandTextView)
- Android自定义View之圆形TextView
- Android自定义View之闪动的TextView
- Android之自定义TextView学习笔记
- Android---自定义Textview之跑马灯
- Android-自定义控件之重写控件(自定义TextView)
- [android自定义控件]之自定义TextView实现两个text
- Android自定义控件之《自定义TextView(支持显示图片)》
- android 自定义TextView
- android 自定义TextView
- Hi3516A开发--接触
- Android 性能优化之Java(Android)代码优化 (三)
- 单链表的反转-Java实现
- codeforces-370 B
- Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier、@scope
- Android之自定义TextView
- ubuntu下安装intel realsense驱动
- The Linux Command Line 读书笔记 第八章 Advanced Keyboard Tricks
- Android 移动端网络优化 (四)
- 【重磅】指尖疯推出高项论文实战1对1免费指导活动
- 网络流
- android emulator虚拟设备分析第四篇之framebuffer
- iOS 类别和扩展(Category和Extension)
- ZigBee协议中的规范(Profile)和簇(Cluester)的概念