动画删除ListView项

Joh*_*ler 31 android android-animation android-layout android-listview

我正在尝试使用以下方法动画删除ListView项:

    mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, final View view, final int i, long l) {
            view.animate().setDuration(500).x(-view.getWidth()).alpha(0f);
            adapter.remove(tasks.get(i));
            adapter.notifyDataSetChanged();
        }
    });
Run Code Online (Sandbox Code Playgroud)

这是行不通的.我基本上遵循了这篇文章顶部第四个答案的建议:

如何动画添加或删除Android ListView行

然而,有一些有趣的绘图内容正在进行,或回收,或者某些东西,因为在动画发生时,屏幕滑落的项目下方的项目也会因某种原因被删除.不幸的是,问题提示者最终标记为正确的答案是整个Android来源的RTFM.我已经浏览了那里,我无法在JellyBean中找到我正在尝试模拟的通知下拉.

TIA.约翰

Ale*_*xey 38

想法:当用户选择行时我开始动画.动画完成后,我从适配器中删除该行.以下代码为所选行设置动画:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ListView listView = (ListView) findViewById(R.id.listView1);
    final ArrayList<String> values = new ArrayList<String>();
    values.add("Android");
    values.add("iPhone");
    values.add("WindowsMobile");
    values.add("Blackberry");
    values.add("Windows7");

    final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, android.R.id.text1, values);
    listView.setAdapter(adapter);

    final Animation animation = AnimationUtils.loadAnimation(this,
            R.anim.slide_out);
    animation.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationStart(Animation animation) {
        }

        @Override
        public void onAnimationRepeat(Animation animation) {
        }

        @Override
        public void onAnimationEnd(Animation animation) {
            adapter.remove(adapter.getItem(selectedRow));
            adapter.notifyDataSetChanged();
        }
    });

    listView.setOnItemClickListener(new OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view,
                int position, long id) {
            Toast.makeText(getApplicationContext(),
                    " " + values.get(position), Toast.LENGTH_LONG).show();
            view.startAnimation(animation);
            selectedRow = position;

        }

    });
}
Run Code Online (Sandbox Code Playgroud)

slide_out.xml文件:

<?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android" >  
    <translate 
        android:fromYDelta="0%" 
        android:toYDelta="100%"  
        android:duration="@android:integer/config_mediumAnimTime"/>  
</set> 
Run Code Online (Sandbox Code Playgroud)

  • 没有链接的简单而干净的答案.谢谢. (2认同)
  • 这将一个`ListView`项目放在另一个`ListView`项目的顶部,看起来很奇怪.但如果你将`android:fromYDelta ="0%"`改为`android:fromXDelta ="0%"`和`android:toYDelta ="100%"`改为`android:toXDelta =" - 100%"`` ListView`项目将从屏幕向左滑动 (2认同)

Mic*_*ian 34

我刚刚找到了一个漂亮的解决方案:https://github.com/paraches/ListViewCellDeleteAnimation

这是视频:http://www.youtube.com/watch?v = bOl5MIti7n0

非常感谢'paraches';)

编辑

从Android版本22.0.0开始,新版本android.support.v7.widget.RecyclerView作为后续版本提供ListView.标准的添加/删除/更新动画可立即使用.小部件动画也很容易定制(很少自定义动画).

如果您需要自定义项目动画,我强烈建议您切换ListViewRecyclerView.