【问题标题】:Android ListView AnimationAndroid ListView 动画
【发布时间】:2012-12-08 12:38:22
【问题描述】:

我正在尝试为 ListView 添加动画我正在使用 getView() 在列表中绘制一些视图。一切正常。

public View getView(int position, View convertView, ViewGroup parent) { }

我正在尝试在用户单击列表单元格时添加动画,然后所有列表单元格都应该向左滑动并且新数据应该同时来自右侧,这意味着单元格数据正在向左移动,同时新数据来自右侧。

我在 OnItemClickListener 中实现了以下代码

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
    Animation slideOutAnimation=AnimationUtils.loadAnimation(this, R.anim.slide_out);
    slideOutAnimation.setDuration(900);

    Animation slideInAnimation=AnimationUtils.loadAnimation(this, R.anim.slide_in);
    slideInAnimation.setDuration(500);

    listView.startAnimation(slideOutAnimation);

    new Handler().postDelayed(new Runnable() {

    @Override
    public void run() {
        data = newData();
        listView.startAnimation(slideInAnimation);
        myAdapterClass.notifyDataSetChanged();
    }
    }, slideOutAnimation.getDuration());
}
};

上面的代码正在运行,但没有得到期望的输出我在更改动画时得到一个空视图。

左滑动画开始---空视图----右滑动画开始

不明白为什么会出现空视图(暂时显示空屏幕),我玩过动画时间和处理程序,但没有运气。

如何删除那个空视图?如何实现这个输出?

左滑动动画开始(数据移动)(同时数据来自右)右滑动动画开始

【问题讨论】:

  • 我已尝试使用以下代码 slideOutAnimation.setAnimationListener(new Animation.AnimationListener(){ public void onAnimationStart(Animation arg0) {data = newData(); listView.startAnimation(slideInAnimation); myAdapterClass.notifyDataSetChanged( ); } public void onAnimationRepeat(Animation arg0) { } public void onAnimationEnd(Animation arg0) { } });它不起作用,它只显示向左滑动,单元格文本消失,没有任何动画,左侧动画开始。

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


【解决方案1】:

当用户单击列表单元格时,我正在尝试添加动画然后全部 列表单元格应向左滑动,新数据应来自右侧 同时,表示单元格数据向左移动,同时新 来自右侧的数据。

您的代码按预期工作,但它不会做您想做的事,因为您使用单个 ListView 小部件,您首先为左滑动设置动画,然后在第一个动画结束后立即为滑动设置动画。

尝试使用包含两个ListViewsViewFlipper(一个是可见的,另一个是新数据附带的)。您将在 ViewFlipperinout 动画)上设置动画,然后在列表项上单击您将执行的操作:

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
      data = newData();
      //set the data for the second list, which currently isn't visible 
      secondListViewAdapter.notifyDataSetChanged();
      viewFlipper().showNext(); //show the next list with animation
}

【讨论】:

    【解决方案2】:

    您可以通过编辑 android:fromXDelta 或 alpha 值来更改动画行为,

    slideout.xml

    <?xml version="1.0" encoding="utf-8"?>
    
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="-100%p" android:toXDelta="-100%p" android:duration="@android:integer/config_shortAnimTime"/>
    
        <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
                android:duration="@android:integer/config_mediumAnimTime" />
    </set>
    

    slidein.xml

    <?xml version="1.0" encoding="utf-8"?>
    <set xmlns:android="http://schemas.android.com/apk/res/android">
        <translate android:fromXDelta="-100%p" android:toXDelta="0" android:duration="@android:integer/config_shortAnimTime"/>
    
        <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
                android:duration="@android:integer/config_mediumAnimTime" />
    </set>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-18
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 2015-09-05
      相关资源
      最近更新 更多