前几天在做公司需求的时候用到自定义textview的功能。主要是判断textview在显示完文字之后还有没有足够的空间用来显示一些图片和其他的文字,这里其他的文字是使用cavans.drawtext函数直接draw在textview上的。
功能完成之后看了下效果,发现用textview设置的字体跟draw出来的字体有些不同,
上面的是用textview直接设置的字体,下面是用draw显示的字体,发现这两种显示效果有些不一样。刚开始的时候还以为是字体的样式的问题,后来试着改变draw的paint的字体样式,也还是会有这个问题。
我刚开始看到这种效果的时候没有什么解决的思路,但是基本可以肯定的应该就是在draw的时候忘记设置paint的一些属性了。于是就去看textview的源码,看看textview中的paint是有那些属性的,看了textview的源码后发现有这么一句代码。mTextPaint = new TextPaint(Paint.ANTI_ALIAS_FLAG);textview为他的画笔paint设置了抗锯齿的属性。于是我也试着将自定义textview中drawtext的paint设置成抗锯齿的属性,发现问题就解决了。用textview设置的字体和draw出来的字体是一样的了。
上面的还是textview设置的字体效果,下面的是加了抗锯齿效果的自定义draw出来的字体。
这里既然用到了paint的抗锯齿这个属性,顺便也学习下这个属性的作用。
设置这个属性可以通过:paint.setAntiAlias(true);或者cavans.setDrawFilter(new PaintFlagsDrawFilter(0,Paint.ANTI_ALILAS_FLAG | Paint.FLITER_BITMAP_FLAG))等方式来设置,当然也可以在new paint的时候就加上这个属性。就像前面的那样。