android 模仿自带的notifacation提示左右滑动删除Listveiw的item项

来源:互联网 发布:淘宝购买须知模板 编辑:程序博客网 时间:2024/05/17 03:37

先来个效果图吧:

可以左右拖动,并且在拖动过程中慢慢变透明....(没有在真机上测试)

                             

                            

下面是主要代码,些的很烂,改进的地方还有很多哦,放在这学习一下了.....

package com.xy.android.wireless.orderdishes.processdata;import java.util.List;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.animation.Animation;import android.view.animation.AnimationSet;import android.view.animation.AnimationUtils;import android.view.animation.Animation.AnimationListener;import android.view.animation.TranslateAnimation;import android.widget.ListView;import com.zte.android.wireless.orderdishes.adapter.util.DetailsListAdapter;import com.zte.android.wireless.orderdishes.server.R;/** * @version 创建时间:2012-11-20 下午3:43:09 类说明 */public class deleteListViewItem implements OnTouchListener {private List<DishInfo> list;// 传进来的list数据private DetailsListAdapter adapter;// 传进来的列表适配器public deleteListViewItem(List<DishInfo> list, DetailsListAdapter adapter) {this.list = list;this.adapter = adapter;}float x = 0, y = 0;int sum;int temp;boolean mFlag = false;float alpha = 1f;@Overridepublic boolean onTouch(View view, MotionEvent event) {float upx = 0, upy = 0, movex = 0;int position = 0;if (event.getAction() == MotionEvent.ACTION_DOWN) {x = event.getX();y = event.getY();}position = ((ListView) view).pointToPosition((int) x, (int) y);if (event.getAction() == MotionEvent.ACTION_MOVE) {movex = event.getX();if (mFlag) {if (temp > movex) {((ListView) view).getChildAt(position).scrollBy((int) (3),0);alpha += 0.01f;((ListView) view).getChildAt(position).setAlpha(alpha);sum -= 3;}}if ((x - movex) < 0) {if (Math.abs(x - movex) > ((ListView) view).getChildAt(position).getWidth() * 0.8) {View v = ((ListView) view).getChildAt(position);deleteListItem(v, position);}((ListView) view).getChildAt(position).scrollBy((int) (-3), 0);alpha -= 0.01f;((ListView) view).getChildAt(position).setAlpha(alpha);sum += 3;temp = (int) movex;mFlag = true;}}if (event.getAction() == MotionEvent.ACTION_UP) {upx = event.getX();upy = event.getY();int position1 = ((ListView) view).pointToPosition((int) x, (int) y);int position2 = ((ListView) view).pointToPosition((int) upx,(int) upy);if (position1 == position2 && Math.abs(x - upx) > 200) {if (x < upx) {View v = ((ListView) view).getChildAt(position);deleteListItem(v, position);alpha = 1f;((ListView) view).getChildAt(position).scrollBy((int) sum,0);((ListView) view).getChildAt(position).setAlpha(alpha);}} else {alpha = 1f;((ListView) view).getChildAt(position).setAlpha(alpha);((ListView) view).getChildAt(position).clearFocus();((ListView) view).getChildAt(position).scrollBy((int) sum, 0);sum = 0;}position = 0;sum = 0;}return false;}protected void deleteListItem(View rowView, final int positon) {Animation animation = (Animation) AnimationUtils.loadAnimation(rowView.getContext(), R.anim.item_anim);animation.setAnimationListener(new AnimationListener() {public void onAnimationStart(Animation animation) {}public void onAnimationRepeat(Animation animation) {}public void onAnimationEnd(Animation animation) {System.out.println("list.size--->>>" + list.size());list.remove(positon);adapter.notifyDataSetChanged();animation.cancel();}});rowView.startAnimation(animation);}}