我正在编写一个聊天应用程序,其活动可以绘制聊天记录(ListView从底部堆叠)以及列表视图下方的文本输入区域。用户可以在文本输入区域中键入他们的聊天消息,然后将此消息附加到列表视图。
为了“反映”这个添加,我在ListAdapter中添加用户输入的字符串,然后调用notifyDatasetChanged()方法。虽然这种方法可以胜任,但是没有动画可以使整个事物看起来不那么“自然”。
我希望在添加行时逐渐滑动列表,并想知道如何实现这一目标。
答案 0 :(得分:1)
如果您可以重新安排使用不断添加textview的linearlayout,那么您可以使用android:animateLayoutChanges="true"
(不确定是否使用linearlayout滚动),来源:how to add animation to the linear layout?
或者你可以在ScrollView上添加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
可以使用postdelayed而不是post来使用一些着色和一些延迟来调味。要在我的应用程序中为视图的背景着色,我使用以下代码:
@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);
}
如果你坚持使用listview,你可以添加:
android:stackFromBottom="true"
android:transcriptMode="alwaysScroll"
到您的列表视图布局,来源:Listview Scroll to the end of the list after updating the list
没试过这最后一个。听起来很有希望,但不知道它是否会增加你想要的效果。
答案 1 :(得分:1)
定义一个xml动画,它将在res / anim /
中放入一个“向上滑动”效果 <?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>
将动画res加载到适配器
Animation slideUp = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.slide_up);
对于适配器的getView()方法中的最后一项,执行类似这样的操作,其中slide up是您加载的动画资源
v.setAnimation(slideUp);
v.startAnimation(slideUp);