2017-09-07 53 views
0

我的预期是这样的。 enter image description here 这是一个电影评论,当一些词汇可能会破坏故事时,它会被这些标签[spoiler] [/ spoiler]所包裹。 所以我写的方法找出每个扰流词的开始索引和结束索引,然后使用MaskFilterSpan模糊它。如何使用Android SpannableString和MaskFilterSpan按预期模糊TextView中的某些文本?

但结果不好。

enter image description here

,如果我只是更换MaskFilterSpan到StrikethroughSpan或BackgroundColorSpan,它可以完美运行。 enter image description hereenter image description here

我的代码:

private void testBlurText() { 
    String text = "Alec Baldwin nailed his job; \n" + 
      "The animators nailed their job (seriously, the art style and changes were amazing);\n" + 
      "The ideas guy nailed his job ([spoiler]It's all the imagination of the kid[/spoiler]);\n" + 
      "The writers just let the story down :(([spoiler]Although at the beginning it's clear that the whole shebang is the older kid's imagination, the writers probably realised that the script was too short and so the end got changed to something that makes no sense. Why would Tim receive the kid for a second time? - unless it was all a dream...[/spoiler]).\n" + 
      "\n" + 
      "All in all, a good movie, amazing acting and animating, partly let down by a badly written ending to the story. 8/10."; 
    SpannableString spanText = new SpannableString(text); 
    List<Pair<Integer, Integer>> spoilersContainer = new ArrayList<>(); 
    getSpoilerIndex(text, 0, spoilersContainer); 
    for (Pair<Integer, Integer> pair : spoilersContainer) { 
     spanText.setSpan(new MaskFilterSpan(new BlurMaskFilter(20, BlurMaskFilter.Blur.NORMAL)), pair.first, pair.second, Spanned.SPAN_INCLUSIVE_INCLUSIVE); 
     Logger.d("SpoilerIndex:" + pair.toString()); 
    } 
    tvTestBlurText.setText(spanText); 
} 

private void getSpoilerIndex(String rawComment, int beginIndex, List<Pair<Integer, Integer>> spoilersContainer) { 
    int startIndex = rawComment.indexOf("[spoiler]", beginIndex); 
    int endIndex = rawComment.indexOf("[/spoiler]", beginIndex); 
    if (startIndex != -1 && endIndex != -1) { 
     spoilersContainer.add(new Pair<>(startIndex, endIndex + "[/spoiler]".length())); 
     getSpoilerIndex(rawComment, endIndex + "[/spoiler]".length(), spoilersContainer); 
    } 
} 

是否有任何错误,或者只是一个MaskFilterSpan的错误吗?

回答

相关问题