产生类似打字机的效果

时间:2012-04-01 23:23:15

标签: android view

Android newb在这里。请用小词: - )

我想在我的Android上模拟打字机输出。显示的输出是由游戏生成的,并且有些自由形式。我希望看到单个字符的效果以每秒约6个字符的速率出现。当看到'回车'时,我想插入一个延迟,然后在左边继续输入。

对观点有哪些建议?对此的选择视图是TextView吗?对于这种只读的粗略滚动输出来说,即使这样也有点过分了。

我在this thread上看到了有关AsyncTask的内容。这看起来很有用。也许我的游戏会写入某种缓冲区,AsyncTask的子类会每隔.15秒左右拉出一个字符,将它添加到TextView,然后使TextView无效()听起来像一个计划?

解决:

我将TextView包装在ScrollView中并且工作正常。正如预期的那样,建议的'TextView.append()'也完成了这项工作。但是我在使用scroll.FullScroll()时遇到了麻烦。显然,必须使用scroll.post()方法中的Runnable执行此操作。我完全不知道为什么,但我稍后会深入研究。关于它有很多SO线程。

1 个答案:

答案 0 :(得分:2)

  

对此选择的视图是TextView吗?

TextView中包含的ScrollView似乎很可能:

  <ScrollView android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
  >
    <TextView android:id="@+id/transcript"
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
    />
  </ScrollView>
  

听起来像一个计划?

您不需要AsyncTask。使用postDelayed()上的TextView或其他内容来安排Runnable在166毫秒内运行。那个Runnable会:

  • 将您的角色附加到TextView
  • ScrollView滚动到底部(如果您已超出屏幕上的内容)
  • 通过postDelayed()安排自己在另一个166毫秒内运行

前两个子弹看起来像:

transcript.append(yourCharacter);
scroll.fullScroll(View.FOCUS_DOWN);

事情不会完全均匀,因为166毫秒是Runnable运行之前的最短时间。 OTOH,略微不规则的按键传递会突出打字机的效果。