Android 开源项目浅读-------SwipeMenuListView-重写,第五章,滑动弹出,放手关闭功能实现
来源:互联网 发布:金牛考勤软件数据库 编辑:程序博客网 时间:2024/05/17 21:44
前面的章节实现了滑动时候第一个选项移动的功能。那么我们要实现滑动那个项目就移动那个项目的功能。其实这个功能很简单,就是在SwipeMenuListView的onTouchEvent函数里将移动分给正确的SwipeMenuLayout对象。采用positionToPosition函数实现,代码如下。
@Override public boolean onTouchEvent(MotionEvent ev) { View view; switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: // mDownX = ev.getX(); // mDownY = ev.getY(); Log.i(TAG, "Action Down"); // Log.i(TAG, "down x is "+mDownX + " down y is "+ mDownY); break; case MotionEvent.ACTION_MOVE: float dx=Math.abs(mDownX- ev.getX()); float dy = Math.abs(mDownY - ev.getY()); // Log.i(TAG, "on touch move x "+ev.getX() +" y "+ev.getY()); // Log.i(TAG, "dx "+dx+" dy "+dy); if(dx > MAX_X){ // Log.i(TAG, "enough offset!"); } mTouchPosition = pointToPosition((int)ev.getX(),(int)ev.getY()); view = getChildAt(mTouchPosition - getFirstVisiblePosition()); if(view instanceof SwipeMenuLayout){ mTouchView =(SwipeMenuLayout)view; mTouchView.onSwipe(ev); } Log.i(TAG,"Action Move"); break; // return true; case MotionEvent.ACTION_UP: Log.i(TAG, "ACtion Up"); mTouchPosition = pointToPosition((int)ev.getX(),(int)ev.getY()); view = getChildAt(mTouchPosition - getFirstVisiblePosition()); if(view instanceof SwipeMenuLayout){ mTouchView =(SwipeMenuLayout)view; mTouchView.onSwipe(ev); } break; default: break; } return super.onTouchEvent(ev); }}
通过上述代码就可以实现该功能了。
上面会出现当你滑动出一个item范围外,会导致其它项目滑动。为了解决这个问题,我们必须记录下按下时候的item位置,当滑动出这个位置时候不响应。首先在SwipeMenuLayout添加一个记录position的变量,添加getter和setter方法。另外修改SwipeMenuListView的OnTouchEvent响应,记录按下时候的位置,在Move里面判断是否出界代码如下。
@Override public boolean onTouchEvent(MotionEvent ev) { View view; switch (ev.getAction()){ case MotionEvent.ACTION_DOWN: int oldPosition = mTouchPosition; Log.i(TAG, "Action Down"); mTouchPosition = pointToPosition((int)ev.getX(),(int)ev.getY()); view = getChildAt(mTouchPosition - getFirstVisiblePosition()); if(view instanceof SwipeMenuLayout){ mTouchView =(SwipeMenuLayout)view; mTouchView.setPosition(mTouchPosition); } break; case MotionEvent.ACTION_MOVE: float dx=Math.abs(mDownX- ev.getX()); float dy = Math.abs(mDownY - ev.getY()); mTouchPosition = pointToPosition((int)ev.getX(),(int)ev.getY()); if(mTouchPosition != mTouchView.getPosition()) { break; } if(dx > MAX_X){ // Log.i(TAG, "enough offset!"); } if(mTouchView != null){ mTouchView.onSwipe(ev); } Log.i(TAG,"Action Move"); break; // return true; case MotionEvent.ACTION_UP: Log.i(TAG, "ACtion Up"); if(mTouchView != null){ mTouchView.onSwipe(ev); } break; default: break; } return super.onTouchEvent(ev); }
这样再滑动就不会出现滑动一次,两个项目会动。
下面来实现菜单隐藏,滑动出现的功能。其实这个应该很简单,我们只须在没有触摸的时候画到屏幕外面,滑动时候画到屏幕内来。
0 0
- Android 开源项目浅读-------SwipeMenuListView-重写,第五章,滑动弹出,放手关闭功能实现
- Android 开源项目浅读-------SwipeMenuListView-重写-第二章,菜单显示
- Android 开源项目浅读-------SwipeMenuListView-重写,第三章,随手指移动的菜单
- Android 开源项目浅读-------SwipeMenuListView-重写,第四章,修改适配器
- Android 开源项目浅读-------SwipeMenuListView-重写,第六章,缓慢收回
- Android 开源项目浅读-------SwipeMenuListView-重写,第七章,菜单停留和暂停响应
- Android 开源项目浅读-------SwipeMenuListView-重写,八章,菜单响应
- Android基于SwipeMenuListView实现滑动删除功能
- Android 开源项目浅读-------SwipeMenuListView-重写-第一章-手指移动事件捕获
- Android 开源项目浅读-------SwipeMenuListView
- Android仿qq下拉刷新及向左滑动列表----PullToRefresh, SwipeMenuListView开源项目整合
- Android仿qq下拉刷新及向左滑动列表----PullToRefresh, SwipeMenuListView开源项目整合
- Android仿qq下拉刷新及向左滑动列表----PullToRefresh, SwipeMenuListView开源项目整合
- Android可左右滑动的ListView开源框架SwipeMenuListView
- android简单实现页面滑动关闭功能
- 开源项目SwipeMenuListView使用
- android SwipeMenuListView ScrollView 滑动冲突
- 开源项目SwipeMenuListView学习笔记
- Vmware-NAT网络模式介绍及理解
- svn服务器搭建和使用:Custom action GenerateSSLKey failed: Command terminated with non-zero exit code
- 重启PHP
- [从头学声学] 第216节 九音真经(上)
- C++宏定义
- Android 开源项目浅读-------SwipeMenuListView-重写,第五章,滑动弹出,放手关闭功能实现
- Maven基本配置
- tar压缩解压缩命令详解
- JAVA连接MYSQL测试
- Load Average (系统负载)
- Python写xls笔记
- eclipse到Android Studio的项目迁移
- Primefaces menu中的menuitem过多产生的问题
- linux文件权限解说