自创一篇滑动删除SlideListView最简单的案例(三)

最近在写滑动删除,网上代码又是看的云里雾里,果断自己研究,虽然效果不太好把,但是思路很清晰,代码逻辑很简单

先来看主页面布局

activity_main.xml--很简单就一个自定义listview

<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="com.example.slidelistview.MainActivity" >

    <com.example.slidelistview.SlideListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

</RelativeLayout>

再看看每条item的布局--很简单就2个textview(我都懒得用imageview,怕麻烦)

listview_item.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="30dp"
    android:orientation="horizontal" >

    <TextView
        android:id="@+id/textview"
        android:gravity="center"
        android:background="#FFA07A"
        android:layout_width="fill_parent"
        android:layout_height="50dp"
        android:text="TextView" />

    <TextView
        android:id="@+id/delete"
         android:gravity="center"
        android:background="#FF3E96"
        android:layout_width="50dp"
        android:layout_height="50dp"
        android:text="删除" />

</LinearLayout>

MainActivity

package com.example.slidelistview;

import java.util.ArrayList;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MainActivity extends Activity {

	private SlideListView listView;
	private MyAdapter myAdapter;
	private ArrayList<String> data = new ArrayList<String>();

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		myAdapter = new MyAdapter();
		for (int i = 0; i < 10; i++) {
			data.add("A");
		}
		listView = (SlideListView) findViewById(R.id.listview);
		listView.setAdapter(myAdapter);
	}

	class MyAdapter extends BaseAdapter {

		@Override
		public int getCount() {
			return data.size();
		}

		@Override
		public Object getItem(int position) {
			return data.get(position);
		}

		@Override
		public long getItemId(int position) {
			return position;
		}

		@Override
		public View getView(final int position, View convertView,
				ViewGroup parent) {
			ViewHolder viewHolder = null;
			if (convertView == null) {
				viewHolder = new ViewHolder();
				convertView = View.inflate(MainActivity.this,
						R.layout.listview_item, null);
				viewHolder.textView = (TextView) convertView
						.findViewById(R.id.textview);
				viewHolder.deleTextView = (TextView) convertView
						.findViewById(R.id.delete);
				convertView.setTag(viewHolder);
			} else {
				viewHolder = (ViewHolder) convertView.getTag();
			}

			viewHolder.textView.setText(data.get(position));
			viewHolder.deleTextView.setOnClickListener(new OnClickListener() {

				public void onClick(View v) {
					data.remove(position);
					myAdapter.notifyDataSetChanged();
					listView.getChildAt(position).scrollTo(0, 0);
				}
			});
			return convertView;
		}

		class ViewHolder {
			private TextView textView;
			private TextView deleTextView;
		}
	}
}

SlideListView

package com.example.slidelistview;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ListView;
import android.widget.Scroller;
import android.widget.Toast;

public class SlideListView extends ListView {
	private Scroller scroller;

	private int downX;
	private int downY;
	private int moveX;
	private int moveY;
	private int downPosition;
	private int upPosition;
	private boolean deleOpen = false;

	private View slideListItem;
	private int lastPos = -1;

	/**
	 * 构造器
	 */
	public SlideListView(Context context, AttributeSet attrs, int defStyleAttr) {
		super(context, attrs, defStyleAttr);
		init(context);
	}

	public SlideListView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(context);
	}

	public SlideListView(Context context) {
		super(context);
		init(context);
	}

	private void init(Context context) {
		scroller = new Scroller(context);
	}

	@Override
	public boolean onTouchEvent(MotionEvent ev) {
		final int action = ev.getAction();
		switch (action) {
		case MotionEvent.ACTION_DOWN:

			downX = (int) ev.getX();
			downY = (int) ev.getY();
			// 获取按下的条目索引
			downPosition = pointToPosition(downX, downY);
			slideListItem = getChildAt(downPosition);
			if (slideListItem != null) {
				slideListItem.scrollTo(0, 0);
			}

			// 如果按下的不是当前的item
			if (lastPos != -1) {
				if (lastPos != downPosition) {
					View childAt = getChildAt(lastPos);
					childAt.scrollTo(0, 0);
				}
			}
			lastPos = downPosition;
			break;

		case MotionEvent.ACTION_MOVE:

			moveX = (int) ev.getX();
			moveY = (int) ev.getY();

			int upPosition = pointToPosition(moveX, moveY);

			if (downPosition == upPosition) {
				// 是同一个条目
				if ((downX - moveX) > 50) {
					if (slideListItem != null) {
						slideListItem.scrollTo(100, 0);
					}

				}
			}

			break;
		case MotionEvent.ACTION_UP:
			break;
		default:
			break;
		}
		return super.onTouchEvent(ev);
	}

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-01 15:02:08

自创一篇滑动删除SlideListView最简单的案例(三)的相关文章

翻译一篇ListView左右滑动删除的最简单的Demo

效果是在某个Item上右滑可以删除某个条目--效果虽然很简单,但是思路很重要 MainActivity package com.yangfuhai.animation1; import java.util.ArrayList; import android.app.ListActivity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; import android.vie

【转】Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

原文网址:http://blog.csdn.net/xiaanming/article/details/17539199 我在上一篇文章中Android 带你从源码的角度解析Scroller的滚动实现原理从源码的角度介绍了Scroller的滚动实现原理,相信大家对Scroller的使用有一定的了解,这篇文章就给大家带来使用Scroller的小例子,来帮助大家更加熟悉的掌握Scroller的使用,掌握好了Scroller的使用我们就能实现很多滑动的效果.例如侧滑菜单,launcher,ListVi

Android ListView 侧滑效果实现(滑动展开、滑动删除)

转载请注明出处:http://blog.csdn.net/lonelyroamer/article/details/42439875 项目需要ListView滑动删除的效果,首先肯定是拿来主义,在网上搜了一遍,发现这样的东西真不少,比较有名的Github上的SwipeListView.但是个人尝试了一下,发现它的bug不少,并且达不到我想要的效果.于是又尝试了一下其他的例子,发现基本效果都有,但是都有不少问题.要么事件冲突,要么OnItemListView或者某个Button响应不了.没办法,只

Android Demo 下拉刷新+加载更多+滑动删除

小伙伴们在逛淘宝或者是各种app上,都可以看到这样的功能,下拉刷新和加载更多以及滑动删除,刷新,指刷洗之后使之变新,比喻突破旧的而创造出新的,比如在手机上浏览新闻的时候,使用下拉刷新的功能,我们可以第一时间掌握最新消息,加载更多是什么nie,简单来说就是在网页上逛淘宝的时候,我们可以点击下一页来满足我们更多的需求,但是在手机端就不一样了,没有上下页,怎么办nie,方法总比困难多,细心的小伙伴可能会发现,在手机端中,有加载更多来满足我们的要求,其实加载更多也是分页的一种体现.小伙伴在使用手机版QQ

[转]Android 使用Scroller实现绚丽的ListView左右滑动删除Item效果

我在上一篇文章中Android 带你从源码的角度解析Scroller的滚动实现原理从源码的角度介绍了Scroller的滚动实现原理,相信大家对Scroller的使用有一定的了解,这篇文章就给大家带来使用Scroller的小例子,来帮助大家更加熟悉的掌握Scroller的使用,掌握好了Scroller的使用我们就能实现很多滑动的效果.例如侧滑菜单,launcher,ListView的下拉刷新等等效果,我今天实现的是ListView的item的左右滑动删除item的效果,现在很多朋友看到这个效果应该

仿知乎安卓client滑动删除撤销ListView

标签(空格分隔): Android 新版的知乎安卓client有一个有趣的功能,就是在一个item里.向右滑动时整个item会越来越透明,滑动到一半时,整个item就不见了.放开手指就是删除.删除后还能够撤销,第一次看见这个功能觉得非常有意思,用了几天业余时间,我仿造里一个.效果例如以下: 那以下就来想想看怎么实现的,大概能够先分解为三部分: 手指滑动删除item 删除item后的撤销功能 滑动时的效果处理 提醒一下假设你对scroller不熟悉.能够先看一下scroller实现原理 先来看最基

关于高仿微信对话列表滑动删除效果代码优化

原文:http://blog.csdn.net/singwhatiwanna/article/details/17515543 最近公司项目需用到微信滑动拉出按钮的效果,发现一位牛人已经实现了相关效果,但控件仍与业务代码存有耦合,于是花了点时间做了些去耦合,并于此进行记录,以防遗忘. 个人认为耦合主要在于两点: 第一点是SlideListView中的onTouchEvent 通过获取item间接得到SlideView,但这样会引入外部数据类MessageItem.          @Overr

滑动删除Item,拖拽切换Item,你想了解的都在这儿

1. 概述 如果上两篇对RecyclerView介绍后,依然没有引起你的兴趣,那么下面关于RecyclerView的使用我相信一定会让你如获珍宝.直接看运行效果. 图-1 RecyclerView滑动删除 图-2 RecyclerView拖拽切换 用ListView或者GridView实现上图中的功能非常麻烦,而如果用RecyclerView来实现,则非常简单. 如果对RecyclerView还没有认识的同学,可以查看这两篇文章. RecyclerView使用一 RecyclerView使用二

带滑动删除的Dummynote

介绍:首先这个应用是结合了我之前做的Dummynote,那个note的删除主要靠的是长按后的ContextMenu public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { menu.add(0, MENU_DELETE, 0, "删除记事"); menu.setHeaderTitle("要如何处理这笔记录?"); super.onCreateConte