展会信息港展会大全

android listView滑动删除 android开发教程
来源:互联网   发布日期:2015-11-26 11:20:23   浏览:1786次  

导读:由于项目需要,最近研究了下android listView的滑动删除,有两种效果,一个是类似QQ列表的滑动删除,一种是类似微信的那种滑动删除,一直知道这个是ios上的删除效果,只是后来才发现,这两种效果分别是ios之前版 ...

由于项目需要,最近研究了下android listView的滑动删除,有两种效果,一个是类似QQ列表的滑动删除,一种是类似微信的那种滑动删除,一直知道这个是ios上的删除效果,只是后来才发现,这两种效果分别是ios之前版本的效果和新出版本的效果。关于android总是要模仿ios的UI效果的各种言论我不想去深究,我估摸着因为 Android系统没给我们准备各种各样的好的UI效果,而ios刚好不一样,所以我们只好各种仿ios了,或许也是为了证明你ios可以实现的各种Ui 效果我机器人照样可以吧,废话不多说了,今天我主要争对第一种形式的滑动删除做简要的说明。效果图如下:

下面上代码:主要是对onTouch事件的重写,发现有人把onTouch事件放到Adapter里面做处理的,发现经常获取不到 MotionEvent.ACTION_UP事件,个人认为还是直接在Activity中重写比较好,还有一种方式我觉得也应该可行,对listView 进行自定义,重写listView重写onTouch 事件,这样既不会显得Activity很累赘,也可以达到很不错的效果,我在这儿就省事儿了直接写到了Activity中。

一、xml文件activity_main:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

item.xml如下:

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:paddingBottom="@dimen/activity_vertical_margin"

android:paddingLeft="@dimen/activity_horizontal_margin"

android:paddingRight="@dimen/activity_horizontal_margin"

android:paddingTop="@dimen/activity_vertical_margin"

tools:context=".MainActivity" >

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

二、Activity代码:

public class MainActivity extends Activity implements OnTouchListener {

public List list = new ArrayList();

private ListView lv;

private StringAdapter adapter;

private int pointX, pointY, endX,endY;

private int position,newpos;

private Button curDel_btn;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv = (ListView) findViewById(R.id.list);

adapter = new StringAdapter(this);

lv.setAdapter(adapter);

lv.setOnTouchListener(this);

}

@SuppressWarnings("static-access")

@Override

public boolean onTouch(View v, MotionEvent event) {

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

System.out.println("====>>>>>>>>>>>>>>ACTION_DOWN"+MotionEvent.ACTION_DOWN);

// 手指按下,计算焦点位于ListView的那个条目

pointX = (int) event.getX();

pointY = (int) event.getY();

// 备注1

position = lv.pointToPosition(pointX, pointY);

if (curDel_btn!=null) {

curDel_btn.setVisibility(View.GONE);

}

break;

case MotionEvent.ACTION_MOVE:

break;

case MotionEvent.ACTION_UP:

System.out.println("====>>>>>>>>>>>>>>ACTION_UP"+MotionEvent.ACTION_UP);

endX = (int) event.getX();

endY=(int)event.getY();

newpos=lv.pointToPosition(endX, endY);

// 原本想着加上这个条件(newpos==position)是不是更精确些,

//经过实践发现,其实我们在滑动listView的列表的时候有时候更渴望有滑动就ok

if (Math.abs(endX - pointX) > 30) {

// 获取到ListView第一个可见条目的position

int firstVisiblePosition = lv.getFirstVisiblePosition();

// --------------备注2

View view = lv.getChildAt(position - firstVisiblePosition);

Button delbtn=(Button)view.findViewById(R.id.del);

delbtn.setVisibility(View.VISIBLE);

curDel_btn=delbtn;

delbtn.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

list.remove(position);

adapter.notifyDataSetChanged();

}

});

}

break;

default:

break;

}

return false;

}

public class StringAdapter extends BaseAdapter {

private LayoutInflater inflater;

private String content = "";

public StringAdapter(Context context) {

inflater = LayoutInflater.from(context);

for (int i = 0; i < 10; i++) {

content = "item " + i;

list.add(content);

}

}

@Override

public int getCount() {

return list.size();

}

@Override

public Object getItem(int position) {

return list.get(position);

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

if (convertView == null) {

convertView = inflater.inflate(R.layout.item, null);

}

TextView tv = (TextView) convertView.findViewById(R.id.title);

tv.setText(getItem(position) + "");

return convertView;

}

}

}

代码很简单,上面也做了注释,相信不难懂,况且我也是菜鸟,只给那些初学者提供一些方法,思路,还望各位大牛指点。

声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: Android-newer

原文地址: http://my.eoe.cn/jiaxiaoya/archive/20879.html

赞助本站

人工智能实验室

相关热词: listView 滑动 android

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港