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);
	}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

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

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

自定义ViewGroup ondraw方法不被调用解决办法

在我们自定义一个View, 继承自ViewGrop, 或其他某些ViewGroup的子类时, 若我们要在ViewGroup中进行一些绘制,我们会想到重写父类的ondraw, 但我们发现此时ondraw...

Android TextView自动换行文字排版参差不齐的原因及解决办法

今天项目没什么进展,公司后台出问题了。看了下刚刚学习Android时的笔记,发现TextView会自动换行,而且排版文字参差不齐。查了下资料,总结原因如下:   1、半角字符与全角字符混乱...

ListView里TextView使用ClickableSpan,ListView的Item无法点击的解决办法

最近遇到一个需求是ListView每一个Item里的TextView可以实现url链接点击跳转浏览器。当通过TextView设置`setMovementMethod(new LinkMovementM...

从ScrollView嵌套EditText的滑动事件冲突分析触摸事件的分发机制以及TextView的简要实现和冲突的解决办法

本篇文章假设读者没有任何的触摸事件基础知识,所以我们会从最基本的触摸事件分发处说起。 ScrollView为什么会出现嵌套EditText出现滑动事件冲突呢?相信你会有这种疑问,我们来看这么一种情...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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