`
砺雪凝霜
  • 浏览: 156307 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

listView Item删除动画

阅读更多

     最近项目要用到很多动画,涵盖item删除、listView item滑动、listView item替换等效果,在gitHub上找到了一个ListViewAnimation的开源项目,但是该项目要依赖一些jar和库,会导致项目过大,经过不懈地努力,在google找到了一个比较轻量级的listView item删除动画,现在给大家分享下,代码我就直接贴上了。

 1 java代码

import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.Animation.AnimationListener;
import android.view.animation.ScaleAnimation;
import android.view.animation.Transformation;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;

public class MainActivity extends Activity {

	static final int ANIMATION_DURATION = 200;
	private static List<MyCell> mAnimList = new ArrayList<MyCell>();
	private MyAnimListAdapter mMyAnimListAdapter;

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

		for (int i=0;i<50;i++) {
			MyCell cell = new MyCell();
			cell.name = "Cell No."+Integer.toString(i);
			mAnimList.add(cell);
		}

		mMyAnimListAdapter = new MyAnimListAdapter(this, R.layout.chain_cell, mAnimList);
		ListView myListView = (ListView) findViewById(R.id.chainListView);
		myListView.setAdapter(mMyAnimListAdapter);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}

	private void deleteCell(final View v, final int index) {
		AnimationListener al = new AnimationListener() {
			@Override
			public void onAnimationEnd(Animation arg0) {
				mAnimList.remove(index);

				ViewHolder vh = (ViewHolder)v.getTag();
				vh.needInflate = true;

				mMyAnimListAdapter.notifyDataSetChanged();
			}
			@Override public void onAnimationRepeat(Animation animation) {}
			@Override public void onAnimationStart(Animation animation) {}
		};

		collapse(v, al);
	}

	private void collapse(final View v, AnimationListener al) {
		final int initialHeight = v.getMeasuredHeight();

		Animation anim = new Animation() {
			@Override
			protected void applyTransformation(float interpolatedTime, Transformation t) {
				if (interpolatedTime == 1) {
					v.setVisibility(View.GONE);
				}
				else {
					v.getLayoutParams().height = initialHeight - (int)(initialHeight * interpolatedTime);
					v.requestLayout();
				}
			}

			@Override
			public boolean willChangeBounds() {
				return true;
			}
		};

		if (al!=null) {
			anim.setAnimationListener(al);
		}
		anim.setDuration(ANIMATION_DURATION);
		v.startAnimation(anim);
	}


	private class MyCell {
		public String name;
	}

	private class ViewHolder {
		public boolean needInflate;
		public TextView text;
		ImageButton imageButton;
	}

	public class MyAnimListAdapter extends ArrayAdapter<MyCell> {
		private LayoutInflater mInflater;
		private int resId;

		public MyAnimListAdapter(Context context, int textViewResourceId, List<MyCell> objects) {
			super(context, textViewResourceId, objects);
			this.resId = textViewResourceId;
			this.mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
		}

		@Override
		public View getView(final int position, View convertView, ViewGroup parent) {
			final View view;
			ViewHolder vh;
			MyCell cell = (MyCell)getItem(position);

			if (convertView==null) {
				view = mInflater.inflate(R.layout.chain_cell, parent, false);
				setViewHolder(view);
			}
			else if (((ViewHolder)convertView.getTag()).needInflate) {
				view = mInflater.inflate(R.layout.chain_cell, parent, false);
				setViewHolder(view);
			}
			else {
				view = convertView;
			}

			vh = (ViewHolder)view.getTag();
			vh.text.setText(cell.name);
			vh.imageButton.setOnClickListener(new OnClickListener() {
				@Override
				public void onClick(View v) {
					deleteCell(view, position);
				}
			});

			return view;
		}

		private void setViewHolder(View view) {
			ViewHolder vh = new ViewHolder();
			vh.text = (TextView)view.findViewById(R.id.cell_name_textview);
			vh.imageButton = (ImageButton) view.findViewById(R.id.cell_trash_button);
			vh.needInflate = false;
			view.setTag(vh);
		}
	}
}

 2 activity_main.xml配置:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
	xmlns:tools="http://schemas.android.com/tools"
	android:layout_width="match_parent"
	android:layout_height="match_parent"
	tools:context=".MainActivity" >

	<ListView
		android:id="@+id/chainListView"
		android:layout_width="match_parent"
		android:layout_height="match_parent" >
	</ListView>

</RelativeLayout>

 3 chain_cell.xml配置

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal" >

	<ImageButton
	    android:id="@+id/cell_trash_button"
	    android:layout_width="48dp"
	    android:layout_height="48dp"
	    android:src="@drawable/trash_can"
	    android:scaleType="fitXY" />
	
	<TextView
	    android:id="@+id/cell_name_textview"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center_vertical|left"
	    android:layout_marginLeft="16dp"
	    android:layout_weight="1"
	    android:text="cell name" />
	
</LinearLayout>

 4  效果

 

  • 大小: 34 KB
分享到:
评论

相关推荐

    ListView item 删除 动画

    本篇文章将深入探讨两种实现ListView item删除动画的方法:侧滑删除和折叠删除。 一、侧滑删除动画 1. 实现原理:侧滑删除是通过在ListView的每个item右侧扩展出一个可滑动的区域,用户向左滑动item时,显示出删除...

    android删除listview item(动画删除)

    3. **优化动画性能**:在大型列表中,为了避免影响整体性能,删除动画应该只对可见的item进行。可以使用AbsListView的`smoothScrollToPositionFromTop()`方法确保动画完成后,ListView自动滚动到下一个可见的item。 ...

    给Listview的Item设置动画效果

    例如,当我们需要在Item插入或删除时添加滑动效果,可以使用 AnimationUtils.loadAnimation() 函数加载系统提供的动画资源,然后在Adapter的getView()方法中为新创建或更新的View应用这些动画。 2. 自定义动画: ...

    Android Listview 列表项删除动画Demo

    listViewItem.startAnimation(animation); ``` 3. 在动画结束时,从数据源中移除该条目,并调用Adapter的`notifyDataSetChanged()`方法,以更新ListView的显示。这会触发ListView重新布局,使得下方的列表项自动上移...

    ListView 滑动删除 item

    滑动删除功能则是ListView的一个高级特性,它允许用户通过手势滑动列表中的单个item来执行删除操作,提高了用户的交互体验。下面将详细探讨如何在Android中实现ListView的滑动删除功能。 首先,实现滑动删除功能...

    ListView滑动删除item

    本篇将详细介绍如何实现ListView的滑动删除item的功能,并提供相关的编程技巧。 一、基本原理 滑动删除的核心在于监听ListView的滑动手势。当用户在ListView的Item上进行滑动操作时,我们需要捕捉这一手势并作出...

    listview 滑动删除Item

    5. **更新Adapter数据**: 当用户确认删除某个Item后,需要更新Adapter的数据源,然后调用Adapter的notifyDataSetChanged()方法通知ListView数据已改变。同时,根据删除操作的状态,可能还需要更新其他Item的位置。 ...

    ListView侧滑删除item

    侧滑删除是通过手势检测来实现的,当用户在ListView的item上向左或向右滑动时,该item会显示出一个删除按钮或者提示,用户点击后即可完成删除操作。这种设计大大提升了交互的便捷性。 实现侧滑删除通常分为以下几个...

    ListView像左滑动Item显示删除按钮

    总的来说,实现ListView中Item左滑显示删除按钮涉及多个步骤,包括自定义ListView、滑动布局设计、适配器逻辑以及动画效果的添加。使用第三方库可以简化这个过程,但自定义实现可以更好地满足特定需求。在实际开发中...

    Listview左右滑动删除item

    总的来说,实现"Listview左右滑动删除item"涉及到了Android手势检测、视图拖动、数据绑定、动画和UI交互等多个方面,需要开发者具备扎实的Android基础和良好的编程习惯。通过以上步骤,你可以为你的应用创建一个高效...

    android listview item 左右滑动删除

    在滑动结束后,执行删除动画,如淡出、缩放等,然后从ListView中移除Item。 5. **监听回调** 在适配器中添加回调接口,以便在Item被删除时通知主Activity或其他组件。这样可以执行相应的业务逻辑,如更新数据库、...

    ListView删除Item,其下部Item依次往上

    综上所述,删除ListView中的Item并让下部Item依次往上移动,主要涉及数据集的操作、适配器的更新以及可能的视图复用和动画效果。在实际开发中,根据项目需求,你可能还需要考虑更多细节,如数据同步、性能优化等。

    ListView加载动画及滑动删除item

    本文将深入探讨如何在ListView中实现加载动画以及滑动删除item的功能。 ### 1. ListView加载动画 加载动画是提升用户体验的一种有效方式,它可以让用户在等待内容加载时感受到互动和趣味性。在ListView中添加加载...

    listview的item右滑删除事件

    微信是许多人日常使用的社交应用,它的很多交互设计被广泛借鉴,其中包括ListView的Item右滑删除功能。这个功能可以提升用户在处理大量列表数据时的效率。下面将详细讲解如何实现ListView的Item右滑删除事件,并参考...

    自定义dialog实现listview长按删除item数据

    至此,我们已经实现了长按ListView item删除数据的基本功能。为了提高用户体验,通常还需要添加确认删除的提示对话框,或者在删除后更新列表视图。此外,还可以根据需求对Dialog的样式进行定制,例如修改背景、边框...

    listview横向滑动item删除item

    标题"listview横向滑动item删除item"和描述"listview横向滑动删除item,完整demo"表明我们要讨论的是如何为ListView添加一个自定义的功能,即在水平滑动时删除列表项。这个功能可以提高用户的交互体验,让用户更加...

    Android ListView左右滑动删除Item效果

    为了增强用户体验和交互性,有时我们需要实现类似iOS中的Swipe to Delete功能,即左右滑动删除ListView中的Item。本教程将详细介绍如何使用Scroller来实现这一效果,并结合RemoveListener进行操作。 一、Scroller...

    ListView动态添加、移除item

    2. 同样,调用`notifyDataSetChanged()`让ListView知道数据已改变,它会自动删除对应的itemView。 四、流畅性优化 1. ViewHolder模式:为提高性能,使用ViewHolder缓存itemView的子视图,避免每次滚动时都去查找子...

    Android ListView长按删除

    在Android开发中,ListView是一种常用的组件,用于展示大量可滚动的数据。它允许用户通过垂直滚动查看多行数据项。...在实际项目中,可以根据需求进一步优化,比如添加动画效果,或者实现批量删除功能。

    android listview加载item动画

    Android listview动画效果代码库,几乎包含了listview的所有动画效果,如 滑入滑出, 飞入飞出,选中列表项 点击删除后,下面的列表项会有向上push up的动画效果,以及仿iphone 滑动删除列表item项动画效果. 灵活应用该...

Global site tag (gtag.js) - Google Analytics