textview 的onDraw()方法被重写后,文字被覆盖掉了的解决办法

原创 2012年03月21日 16:38:52

不知道有没有人会遇到跟我一样的问题,或者说是跟我犯一样的错误。

之前曾有过,为了把textView做成圆角背景的。就重写的TextView的onDraw()方法,但是发现圆角

画上了,但是文字被覆盖了。心里就默认这个路子走不通放下了。。。。。。


甚至为此还想了好些不好的办法,其中就有

1.重写Layout的onDraw()方法,把TextView设置为透明放到Layout上面。

2.继承Shape类,在其draw方法里面画一个圆角矩形,然后用MyShape对象构造一个ShapeDrawable对象

把ShapeDrawable对象设为TextView的背景等等此类。


其实问题特别简单。

只需要把TextView的onDraw()方法中的super.onDraw(canvas)方法放到最后调用。

一点就明白了。因为自己要画的东西是在下面的,所有要先画上去,然后在让父类(TextView)画他的文字。

如果顺序反了,就会使得在父类在画完文字以后,在其上面又画了一个图形,当然把文字盖上了。

想想真是犯了个好低级的错误啊,不过还好的是现在明白了。


测试代码如下:

RectF src = new RectF(10f, 0f, 100f, 20f);
	Paint p = new Paint();
	String str1, str2, str3;
	
	@Override
	protected void onDraw(Canvas canvas) {
		// TODO Auto-generated method stub
		//TextPaint tp = getPaint() ;
		
		if(str1 != null){
			src.left = this.getTextSize() * str1.length() / 2;
		}
		if(str2 != null){
			src.right = src.left + getTextSize() * str2.length() / 2;
		}
		p.setColor(Color.BLUE);
		canvas.drawRoundRect(src, 6.0f, 6.0f, p);
		Log.d("lxy", "src = " + src);
		
		super.onDraw(canvas);
	}
	
	public void setText(String s1, String s2, String s3){
		str1 = s1;
		str2 = s2;
		str3 = s3;
		setText(str1 + str2 + str3);
	}


1、重写TextView的onDraw方法

Android重写系统TextView 一、目的 重写Android系统TextView,是为了解决系统TextView中文换行所带来的参差不齐的锯齿效果。如图1.1为系统TextView的绘制结果,...
  • aiwusheng
  • aiwusheng
  • 2013年05月01日 21:54
  • 1683

Android 中重写TextView实现 跑马灯 最简单的方法

Android中TextView 跑马灯失效很大的原因就是未获取到焦点,所以我们要做的就是让TextView获取到焦点就成功了,上代码: package com.wgao.tini_live.vie...
  • fengzhongdeyang
  • fengzhongdeyang
  • 2016年03月04日 10:29
  • 2508

Android控件TextView的实现原理分析

在前面一个系列的文章中,我们以窗口为单位,分析了WindowManagerService服务的实现。同时,在再前面一个系列的文章中,我们又分析了窗口的组成。简单来说,窗口就是由一系列的视图按照一定的布...
  • Luoshengyang
  • Luoshengyang
  • 2013年03月11日 00:56
  • 89015

TextView源码解析-----绘制过程

分析思路一般自定义view都需要满足2个条件,展示我们期望的UI,正确传递或者接收处理点击或者触摸事件。 所以对于TextView的分析从三个地方展开 1.绘制过程 2.事件接收处理 3.特殊...
  • wz249863091
  • wz249863091
  • 2016年07月30日 23:04
  • 2859

Android自定义View(一、初体验自定义TextView)

转载请标明出处: http://blog.csdn.net/xmxkf/article/details/51376048 本文出自:【openXu的博客】 继承View重写onDraw...
  • u010163442
  • u010163442
  • 2016年05月19日 16:10
  • 18617

Android之——自定义TextView

在这一篇博文中,将向大家介绍如何以最简单的方式,来自定义Android中的控件,下面我们以自定义TextView为例来向大家介绍如何自定义Android中的控件。 首先,我们来简单说一下Android...
  • l1028386804
  • l1028386804
  • 2015年07月27日 11:48
  • 6462

textview 的onDraw()方法被重写后,文字被覆盖掉了的解决办法

不知道有没有人会遇到跟我一样的问题,或者说是跟我犯一样的错误。 之前曾有过,为了把textView做成圆角背景的。就重写的TextView的onDraw()方法,但是发现圆角 画上了,但是...
  • sd19871122
  • sd19871122
  • 2015年05月30日 14:16
  • 696

Android TextView富文本深入探索

TextView富文本显示主要有两种方式,一个是使用SpannableString类,另一种是直接将富文本写成HTML形式。SpannableStringSpannableString是Android...
  • GavinLi_369
  • GavinLi_369
  • 2017年12月17日 14:58
  • 52

1、重写TextView的onDraw方法

Android重写系统TextView 一、目的 重写Android系统TextView,是为了解决系统TextView中文换行所带来的参差不齐的锯齿效果。如图1.1为系统TextView的绘制结果,...
  • aiwusheng
  • aiwusheng
  • 2013年05月01日 21:54
  • 1683

Android UI 之居中绘制文本内容的正确方法——实现自定义一个TextView

我们在自定义一个控件的时候,有时候会需要自己来绘制一些文本内容,这样就自然而然遇到确定文本的方位的问题,比如文本需要水平居中,垂直居中,居左,居右,左上。。。等等很多情况。其中最常见的就是文本位于控件...
  • carrey1989
  • carrey1989
  • 2013年08月27日 18:55
  • 8969
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:textview 的onDraw()方法被重写后,文字被覆盖掉了的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)