我希望TextVIEw中的Text可以逐字显示,甚至可以逐字母显示,就像大多数rpgs和带有文本框的冒险一样.文本流应该是什么样子的一个很好的例子是游戏phoenix wright(http://youtu.be/2OOX2Gv0768?t=1m7s)
我到现在为止尝试的是:
protected voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.activity_main); String text = "test test test test"; String[] split = text.split(" "); Deque<String> words = new linkedList<String>(); for (int i = 0; i<split.length; i++) { words.addLast(split[i]); } showNextWord(words);}public voID showNextWord(final Deque<String> words){ Handler handler = new Handler(); handler.postDelayed(new Runnable() { public voID run() { TextVIEw t = (TextVIEw) findVIEwByID(R.ID.textBox); t.append(words.pollFirst()+" "); if (words.size()>0) showNextWord(words); } }, 500);}
我在模拟器上进行了测试,它似乎性能较低,如果我在显示每个字母后开始延迟,则更多.延迟不一致.
除此之外,我希望有一个更优雅的解决方案.也许某种方式可以更加灵活地延迟?例如.判刑后延误等等.
非常感谢你!
解决方法:
public class Typewriter extends TextVIEw {private CharSequence mText;private int mIndex;private long mDelay = 500; //Default 500ms delaypublic Typewriter(Context context) { super(context);}public Typewriter(Context context, AttributeSet attrs) { super(context, attrs);}private Handler mHandler = new Handler();private Runnable characteradder = new Runnable() { @OverrIDe public voID run() { setText(mText.subSequence(0, mIndex++)); if(mIndex <= mText.length()) { mHandler.postDelayed(characteradder, mDelay); } }};public voID animateText(CharSequence text) { mText = text; mIndex = 0; setText(""); mHandler.removeCallbacks(characteradder); mHandler.postDelayed(characteradder, mDelay);}public voID setCharacterDelay(long millis) { mDelay = millis;}}
并在您的活动中使用上面的类,如下所示:
Typewriter writer = new Typewriter(this); //Add a character every 200ms writer.setCharacterDelay(200); writer.animateText("Sample String");
总结 以上是内存溢出为你收集整理的如何在TextView中延迟显示文本(逐字逐句)全部内容,希望文章能够帮你解决如何在TextView中延迟显示文本(逐字逐句)所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)