0
我的預期是這樣的。 這是一個電影評論,當一些詞彙可能會破壞故事時,它會被這些標籤[spoiler] [/ spoiler]所包裹。 所以我寫的方法找出每個擾流詞的開始索引和結束索引,然後使用MaskFilterSpan模糊它。如何使用Android SpannableString和MaskFilterSpan按預期模糊TextView中的某些文本?
但結果不好。
,如果我只是更換MaskFilterSpan到StrikethroughSpan或BackgroundColorSpan,它可以完美運行。
我的代碼:
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的錯誤嗎?
哇,快速,準確! – floatingmuseum