我有5个TextView字段用于显示字符串并每10秒更改一次文本。 为了进行更改,我有一个AsyncTask抓取下面的5条消息(doInBackground),并将它们传递给onPostExecute以显示在UI中。Android动画只显示最后一个ArrayList元素
当我在没有动画的情况下显示消息时,一切正常,并且消息每次都通过新的AsyncTask每10秒旋转一次。 现在,当我尝试在TextView上使用简单的淡入/淡出动画时,我可以看到它们全部淡出,然后返回到占位符字符串,但是我想要显示的实际文本消息仅显示在最后一个TextView。
AsyncTask是我的MainActivity.java的内部类。 我在MainActivity.java实施了AnimationListener并且由于该在onPostExecute之下的物体((TextView的)mNextTextView & (字符串)mNextMessageToDisplay)也被宣布为在主类的全局变量。
这里的AsyncTask的onPostExecute:
protected void onPostExecute(List<String> mFiveMessagesToDisplay) {
super.onPostExecute(mFiveMessagesToDisplay);
for (int mTextViewCounter = 0; mTextViewCounter < 5; mTextViewCounter++) {
// Prepare the next TextView and message to use
mNextTextViewToUse = mTextViewArrayList.get(mTextViewCounter);
mNextMessageToDisplay = mFiveMessagesToDisplay.get(mTextViewCounter);
// Post and animate the message changes in the TextView
mNextTextViewToUse.startAnimation(mFadeOutAnimation);
}
}
而且我AnimationListener:
private AnimationListener mFadeOutAnimListener = new AnimationListener() {
public void onAnimationStart(Animation animation) {}
public void onAnimationRepeat(Animation animation) {}
public void onAnimationEnd(Animation animation) {
mNextTextViewToUse.setVisibility(View.INVISIBLE);
mNextTextViewToUse.setText(mNextMessageToDisplay);
mNextTextViewToUse.setVisibility(View.VISIBLE);
mNextTextViewToUse.startAnimation(mFadeInAnimation);
}
}
正如你看到的,我的setText()方法应用mNextTextViewToUse对象上mNextMessageToDisplay的内容,这是正如之前提到的主类中的全局变量。
这两个ArrayLists,一个包含消息,另一个包含正确的,我重复了两个并打印内容 - 一切都在它的位置。 再次提醒,如果我在onPostExecute下使用setText()和相同的TextView和String对象,那么在没有动画的情况下,一切都很好。
非常感谢提前!
我已经试过你上面建议的东西,事情是,无论是我的下一个TextView的旁边消息显示引用是主要活动类的全局变量,即使我通过字符串值在我的TextView实现中的setTextAnimated()方法中,它不能将该String分配给我需要用于循环中setText()的字符串。你知道一种方法,我可以在我的动画期间让for循环暂停,并且在onAnimationEnd被调用时让代码继续吗? –