Listview动画(幻灯片向上)

时间:2014-02-24 03:03:02

标签: android android-layout android-listview android-animation

我正在编写一个聊天应用程序,其活动可以绘制聊天记录(ListView从底部堆叠)以及列表视图下方的文本输入区域。用户可以在文本输入区域中键入他们的聊天消息,然后将此消息附加到列表视图。

为了“反映”这个添加,我在ListAdapter中添加用户输入的字符串,然后调用notifyDatasetChanged()方法。虽然这种方法可以胜任,但是没有动画可以使整个事物看起来不那么“自然”。

我希望在添加行时逐渐滑动列表,并想知道如何实现这一目标。

2 个答案:

答案 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);