最近在考题系统上给每个题目增加一个单选、多选还是判断的一个标记的时候,遇到了点麻烦,现记录下来,以备不时之需,效果如下:
首先说明下,哪个类型的type不是图片,是个文字加一个背景图,我的实现方式也很简单,就是利用系统的SpannableStringBuilder,不过我这里偷懒了,使用一个别人封装好的工具,地址如下:https://github.com/binaryfork/Spanny,但是如果你要达到我这个目的的话,直接去使用,你会发现总有问题,因为不仅仅只有图片,还有文字,系统和Spanny只能提供要么插入文字,要么插入图片,或者给文字设置背景色,但是如果是要对文字加个背景就有点为难了,那怎么办呢?
嘿嘿,这里面我采用了一个迂回战术,那就是既然Spanny 支持将一张图片进行插入,那么我就将文字以及文字的背景整个转化成一张图片不就完事了么?
ok,既然这么想到了,那就开始动手,代码如下:
tv.setDrawingCacheEnabled(true);
tv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
tv.layout(0, 0, tv.getMeasuredWidth()+16, tv.getMeasuredHeight());
Bitmap bitmap = Bitmap.createBitmap(tv.getDrawingCache());
通过上面的代码已经将文字和它的背景已经成功转化为一张图片了,但是到这里,一定要注意还要加上这样一句代码:tv.destroyDrawingCache();
随手释放资源,这是个好习惯,必须要记住。^_^
最难的部分已经完成了,那最后就是把图片插入进去就行了,代码如下:
spanny.append(question.question, new ImageSpan(getActivity(),bitmap)) ;
//将内容设置到对应的控件
mTv_question_body.setText(spanny);
PS: 可能对于文字环绕效果,有些童鞋可能会用这个MixtureTextView 但是个人感觉这个某些场景下会有问题,比如我上面的这个需求就不能正常使用,顺带说一句,如果直接利用系统提供的API就能满足需求的话,那还是尽可能的使用系统API吧,必须兼容性和稳定性方面能更好的保障。