侧滑删除进阶(四)

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

先来看主页面布局

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-08-06 17:08:55

侧滑删除进阶(四)的相关文章

侧滑删除进阶(三)

附上一张不是效果的效果图,之前图丢了,从新弄下,大概意思就是这个 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:layou

侧滑删除进阶(五)

*********************************************跟上一篇效果一样*********************************** activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" and

侧滑删除进阶(七、八)

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"

侧滑删除进阶(一)

效果是在某个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

侧滑删除进阶(二)

MainActivity package com.example.ss; import java.util.ArrayList; import android.app.ListActivity; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.

自定义控件进阶02_侧滑删除,粘性控件

1 快速索引 细节问题: 1.1 把当前被选中的字母索引置为灰色,否则为白色 每一次在快速索引栏上的触摸事件都触发invalidate(),重走onDraw()方法 在onDraw()方法里,做判断,如果通过触摸事件计算的索引与绘制字母数组的索引一致时就更改画笔的颜色,(记得在触摸事件中如果手指抬起,就把计算的索引置为-1) 1.2 弹出吐司不太好看,弹出一个圆角的矩形框会好看一些(实际上就是一个圆角的TextView,平常隐藏,滑动的时候显示) 圆角:定义背景的xml文件,shape根节点,弧

【Android自定义ViewGroup】不一样的轮子,巧用类变量解决冲突,像IOS那样简单的使用侧滑删除,一个控件搞定Android item侧滑删除菜单。

================================================================================== [1 序言] 侧滑删除的轮子网上有很多,最初在github上看过一个,还是ListView时代,那是一个自定义ListView 实现侧滑删除的,当初就觉得这种做法不是最佳,万一我项目里又同时有自定义ListView的需求,会增加复杂度. 写这篇文章之前又通过毒度搜了一下,排名前几的CSDN文章,都是通过自定义ListVIew和Vie

Android基础控件——RecyclerView实现拖拽排序侧滑删除效果

RecyclerView实现拖拽排序侧滑删除效果 事先说明: RecyclerView是ListView的升级版,使用起来比ListView更规范,而且功能和动画可以自己添加,极容易扩展,同样也继承了ListView复用convertView和ViewHolder的优点.   思路分析: 1.导包.在布局中使用RecyclerView 2.需要一个JavaBean用来存储展示信息 3.需要一个填充RecyclerView的布局文件 4.在代码中找到RecyclerView,并为其绑定Adapte

Tableciew的基本属性和侧滑(删除 置顶 更多)

#import <UIKit/UIKit.h> //使用tableview必须遵循的 @interface ViewController : UIViewController<UITableViewDataSource,UITableViewDelegate> @property(strong,nonatomic) UITableView *tableview; //数据源 @property(strong,nonatomic) NSArray *students; @end #i