0

我正在編寫一個聊天應用程序,該應用程序具有一個活動,它將繪製聊天記錄(從底部疊加的ListView)以及列表視圖下方的文本輸入區域。用戶可以在文本輸入區域輸入他們的聊天消息,然後這個消息被追加到列表視圖。列表視圖動畫(幻燈片向上排列)

要「反映」此添加,我將用戶輸入的字符串添加到我的ListAdapter中,然後調用notifyDatasetChanged()方法。雖然這種方法可以完成這項工作,但沒有任何動畫可以讓整個事情看起來不那麼「自然」。

我希望隨着行的添加逐漸推出列表,並希望知道如何實現。

回答

1

如果你可以重新安排的LinearLayout,不斷被添加textviews使用,那麼你可以使用android:animateLayoutChanges="true"(不知道雖與LinearLayout中滾動),來源:how to add animation to the linear layout?

或者你可以有一個滾動型的,你添加TextViews至年底,並呼籲:

final ScrollView scrollview = ((ScrollView) findViewById(R.id.scrollview)); 
scrollview.post(new Runnable() { 
    @Override 
    public void run() { 
     scrollview.fullScroll(ScrollView.FOCUS_DOWN); 
    } 
}); 

來源:How to scroll to bottom in a ScrollView on activity startup

可以用一些色彩和一些延遲使用postdelaye調味而不是發佈。爲了着色我的應用程序視圖的背景我用這個代碼:

@SuppressLint("NewApi") private void tintBackground() { 
    ColorDrawable[] color = { new ColorDrawable(Color.RED), 
      new ColorDrawable(Color.WHITE) }; 
    TransitionDrawable trans = new TransitionDrawable(color); 
    int sdk = android.os.Build.VERSION.SDK_INT; 
    if (sdk < android.os.Build.VERSION_CODES.JELLY_BEAN) { 
     mViewPager.setBackgroundDrawable(trans); 
    } else { 
     mViewPager.setBackground(trans); 
    } 
    trans.startTransition(ANIMATION_TINTBACKGROUND); 
} 

如果你堅持使用列表視圖,您可以添加:

android:stackFromBottom="true" 
android:transcriptMode="alwaysScroll" 

您的ListView佈局,來源:Listview Scroll to the end of the list after updating the list

還沒有試過這最後一個。聽起來很有前途,但不知道它是否增加了你正在尋找的效果。

+0

所有的方法看起來是合理的。我將嘗試最後一個(因爲它保證了最小的代碼更改)。非常感謝! –

1

定義XML動畫,這將有一個「向上滑動」效應放在RES /動畫/

<?xml version="1.0" encoding="utf-8"?> 
<set xmlns:android="http://schemas.android.com/apk/res/android" 
    android:interpolator="@android:anim/accelerate_interpolator" 
    android:shareInterpolator="true" > 

    <translate 
     android:duration="200" 
     android:fromXDelta="0" 
     android:fromYDelta="20%" 
     android:toXDelta="0" 
     android:toYDelta="0" /> 

</set> 

負載在適配器

Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up); 

動畫RE上的最後一個項目你適配器的getView()方法做這樣的事情,其中​​向上滑動是您加載的動畫資源

v.setAnimation(slideUp); 
    v.startAnimation(slideUp);