CN108646963B - 一种列表滑动删除的实现方法 - Google Patents
一种列表滑动删除的实现方法 Download PDFInfo
- Publication number
- CN108646963B CN108646963B CN201810336945.9A CN201810336945A CN108646963B CN 108646963 B CN108646963 B CN 108646963B CN 201810336945 A CN201810336945 A CN 201810336945A CN 108646963 B CN108646963 B CN 108646963B
- Authority
- CN
- China
- Prior art keywords
- sliding
- layout
- android system
- variable
- defining
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/01—Input arrangements or combined input and output arrangements for interaction between user and computer
- G06F3/048—Interaction techniques based on graphical user interfaces [GUI]
- G06F3/0481—Interaction techniques based on graphical user interfaces [GUI] based on specific properties of the displayed interaction object or a metaphor-based environment, e.g. interaction with desktop elements like windows or icons, or assisted by a cursor's changing behaviour or appearance
- G06F3/0482—Interaction with lists of selectable items, e.g. menus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/451—Execution arrangements for user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- User Interface Of Digital Computer (AREA)
Abstract
本发明涉及一种列表滑动删除的实现方法,步骤如下:1),自定义滑动布局类SlideView,提供可滑动删除的列表子布局;2),定义滑动监听接口,提供回调接口;3),定义并存储相关参数和信息;4),初始化对象,设置布局方向,加载布局资源文件,计算滑动菜单的宽度;5),设置菜单按钮上的文字、列表子条目的布局内容和滑动监听回调接口;6),当滑动事件event触发,计算滑动的距离是否大于设定的范围;7),判断是否滑动结束;8),重写onTouchEvent方法进行事件的分化和滑动处理。本发明,采用自定义SlideView对每一个item做成一个可以滑动的控件,实现了滑动菜单功能,自定义ListView监听触摸事件对事件进行处理分发,响应及时,运行稳定。
Description
技术领域
本发明涉及滑动操作交互技术领域,具体说是一种列表滑动删除的实现方法。
背景技术
现在App的交互设计中,常见有列表滑动打开删除等菜单,方便用户当前页面操作增强用户体验,例如:QQ中,列表中某一行向左滑动,则在该行右侧出现若干按钮,通常包括:置顶按钮,标为未读按钮,删除按钮。
而Android***自带的ListView只支持数据列表的展示,没有滑动删除功能。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种列表滑动删除的实现方法,采用自定义SlideView对每一个item做成一个可以滑动的控件,实现了滑动菜单功能,针对SlideView是左右滑动,自定义ListView监听触摸事件对事件进行处理分发,响应及时,运行稳定。
为达到以上目的,本发明采取的技术方案是:
一种列表滑动删除的实现方法,其特征在于,包括如下步骤:
步骤1,自定义滑动布局类SlideView,用来提供可滑动删除的列表子布局,滑动布局类SlideView继承Android***线性布局LinearLayout;
步骤2,定义滑动监听接口OnSlideListener,用来提供滑动状态变化的回调;
步骤3,定义变量mContext,用来提供上下文和初始化View,是Android***提供的Context类型的变量;
步骤4,定义变量mViewContent,用来放置列表内容,是Android***提供的线性布局LinearLayout类型的变量,
定义变量mHolder,用来放置滑动的菜单选项,是Android***提供的相对布局RelativeLayout类型的变量;
步骤5,定义滑动回调接口mOnSlideListener,用来向上层通知滑动事件,是定义滑动监听接口OnSlideListener类型;
步骤6,设定控制参数变量;
步骤7,初始化对象mScroller,赋值为Scroller(mContext),mContext是Android***提供的上下文对象,
设置布局方向,调用Android***线性布局LinearLayout里的方法setOrientation,设置线性布局为横向布局,
加载布局资源文件,调用Android***View对象提供的inflate方法来加载布局资源文件,存储于变量mViewContent中,
计算滑动菜单的宽度,存储于变量mHolderWidth中;
步骤8,设置菜单按钮上的文字setButtonText、列表子条目的布局内容setContentView和滑动监听回调接口setOnSlideListener;
步骤9,当滑动事件event触发,计算滑动的距离是否大于设定的范围,大于则调用Android***View对象中的scrollTo方法计算滑动到指点坐标位置;
步骤10,判断是否滑动结束,结束则滑动到指点位置和重新绘制;
步骤11,定义ListViewCompat,继承Android***提供的ListView对象;
步骤12,定义变量mFocusedItemView,用来提供滑动效果,是自定义SlideView类型的变量;
步骤13,定义关闭指定位置滑动菜单的方法shrinkListItem;
步骤14,重写onTouchEvent方法进行事件的分化和滑动处理。
在上述技术方案的基础上,步骤2中,滑动监听接口OnSlideListener提供三个常量参数用于表示当前的状态:
SLIDE_STATUS_OFF,是Android***的int类型的数据,
SLIDE_STATUS_START_SCROLL,是Android***的int类型的数据,
SLIDE_STATUS_ON,是Android***的int类型的数据,
滑动监听接口OnSlideListener提供一个抽象方法void onSlide(View view,int status),其中:
view是自定义滑动布局类SlideView类型的view,
status是当前的状态。
在上述技术方案的基础上,步骤4中,定义变量mScroller,用来提供弹性滑动效果,是Android***提供的Scroller类型的变量。
在上述技术方案的基础上,步骤6中,具体包括:
变量mHolderWidth,是Android***提供的int类型,用来控制滑动菜单的宽度,
变量mLastX、mLastY,是Android***提供的int类型,用来记录上次滑动的坐标位置,
常量TAN,是Android***提供的int类型,用来控制滑动角度,仅当满足设定条件下才进行滑动。
在上述技术方案的基础上,步骤7中,布局资源文件默认为在layout文件夹下定义好的布局资源文件R.layout.slide_view_merge,对应于当前自定义的SlideView对象。
在上述技术方案的基础上,步骤7中,计算滑动菜单的宽度时,
用Android***Resources对象里的getDisplayMetrics函数来获取屏幕参数信息,
再用Android***布局对象提供的getResources函数来获取资源对象,
再用Android***TypedValue对象提供的单位转换的函数applyDimension来dp转px,
最后计算值用Android***Math类中的round 方法来数学计算四舍五入。
在上述技术方案的基础上,默认通过函数shrink,把当前状态设置为关闭。
在上述技术方案的基础上,步骤9中,滑动事件event是Android***提供的MotionEvent类型的变量,
调用Android***MotionEvent对象里的方法getX和getY获取事件触发的x和y坐标值,
调用Android***View对象里的getScrollX方法来获取x轴方法移动的距离。
在上述技术方案的基础上,在步骤9之后,根据需要添加缓慢滚动到指定位置的滑动效果smoothScrollTo。
本发明所述的列表滑动删除的实现方法,采用自定义SlideView对每一个item做成一个可以滑动的控件,实现了滑动菜单功能,针对SlideView是左右滑动,自定义ListView监听触摸事件对事件进行处理分发,响应及时,运行稳定。
附图说明
本发明有如下附图:
图1本发明的流程图。
具体实施方式
以下结合附图对本发明作进一步详细说明。
如图1所示,本发明所述的列表滑动删除的实现方法,包括如下步骤:
步骤1,自定义滑动布局类SlideView,用来提供可滑动删除的列表子布局,滑动布局类SlideView继承Android***线性布局LinearLayout;
步骤2,定义滑动监听接口OnSlideListener,用来提供滑动状态变化的回调;
步骤3,定义变量mContext,用来提供上下文和初始化View,是Android***提供的Context类型的变量;
步骤4,定义变量mViewContent,用来放置列表内容,是Android***提供的线性布局LinearLayout类型的变量,
定义变量mHolder,用来放置滑动的菜单选项,是Android***提供的相对布局RelativeLayout类型的变量;
步骤5,定义滑动回调接口mOnSlideListener,用来向上层通知滑动事件,是定义滑动监听接口OnSlideListener类型;
步骤6,设定控制参数变量;
步骤7,初始化对象mScroller,赋值为Scroller(mContext),mContext是Android***提供的上下文对象,
设置布局方向,调用Android***线性布局LinearLayout里的方法setOrientation,设置线性布局为横向布局,
加载布局资源文件,调用Android***View对象提供的inflate方法来加载布局资源文件,存储于变量mViewContent中,
计算滑动菜单的宽度,存储于变量mHolderWidth中;
步骤8,设置菜单按钮上的文字setButtonText、列表子条目的布局内容setContentView和滑动监听回调接口setOnSlideListener;
步骤9,当滑动事件event触发,计算滑动的距离是否大于设定的范围,大于则调用Android***View对象中的scrollTo方法计算滑动到指点坐标位置;
步骤10,判断是否滑动结束,结束则滑动到指点位置和重新绘制;
步骤11,定义ListViewCompat,继承Android***提供的ListView对象;
步骤12,定义变量mFocusedItemView,用来提供滑动效果,是自定义SlideView类型的变量;
步骤13,定义关闭指定位置滑动菜单的方法shrinkListItem;
步骤14,重写onTouchEvent方法进行事件的分化和滑动处理。
经过以上步骤可实现滑动删除列表功能。
在上述技术方案的基础上,步骤2中,滑动监听接口OnSlideListener提供三个常量参数用于表示当前的状态:
SLIDE_STATUS_OFF,是Android***的int类型的数据,
SLIDE_STATUS_START_SCROLL,是Android***的int类型的数据,
SLIDE_STATUS_ON,是Android***的int类型的数据,
滑动监听接口OnSlideListener提供一个抽象方法void onSlide(View view,int status),其中:
view是自定义滑动布局类SlideView类型的view,
status是当前的状态。
在上述技术方案的基础上,步骤4中,定义变量mScroller,用来提供弹性滑动效果,是Android***提供的Scroller类型的变量。
在上述技术方案的基础上,步骤6中,具体包括:
变量mHolderWidth,是Android***提供的int类型,用来控制滑动菜单的宽度,
变量mLastX、mLastY,是Android***提供的int类型,用来记录上次滑动的坐标位置,
常量TAN,是Android***提供的int类型,用来控制滑动角度,仅当满足设定条件下才进行滑动。
在上述技术方案的基础上,步骤7中,布局资源文件默认为在layout文件夹下定义好的布局资源文件R.layout.slide_view_merge,对应于当前自定义的SlideView对象。
在上述技术方案的基础上,步骤7中,计算滑动菜单的宽度时,
用Android***Resources对象里的getDisplayMetrics函数来获取屏幕参数信息,
再用Android***布局对象提供的getResources函数来获取资源对象,
再用Android***TypedValue对象提供的单位转换的函数applyDimension来dp转px,
最后计算值用Android***Math类中的round 方法来数学计算四舍五入。
以下为一个步骤7的具体实施示例:
mScroller = new Scroller(mContext);
setOrientation(LinearLayout.HORIZONTAL);
View.inflate(mContext, R.layout.slide_view_merge, this);
mViewContent = (LinearLayout) findViewById(R.id.view_content);
mHolderWidth = Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, mHolderWidth, getResources().getDisplayMetrics()))。
在上述技术方案的基础上,默认通过函数shrink,把当前状态设置为关闭。
在上述技术方案的基础上,步骤9中,滑动事件event是Android***提供的MotionEvent类型的变量,
调用Android***MotionEvent对象里的方法getX和getY获取事件触发的x和y坐标值,
调用Android***View对象里的getScrollX方法来获取x轴方法移动的距离。
更进一步,可以用Android***Scroller对象中的isFinished和abortAnimation方法分别来判断滑动结束和取消动画。
在上述技术方案的基础上,在步骤9之后,可根据需要添加缓慢滚动到指定位置的滑动效果smoothScrollTo,代码如下:
private void smoothScrollTo(int destX, int destY) {
int scrollX = getScrollX();
int delta = destX - scrollX;
mScroller.startScroll(scrollX, 0, delta, 0, Math.abs(delta) *3);
invalidate();
}
其中:
destX和destY是将要滚动到的位置坐标信息,startScroll是Android***Scroller对象中的方法用来滑动,invalidate是Android***View对象里的方法用来重绘控件。
在上述技术方案的基础上,步骤10可通过重写computeScroll方法实现,代码如下:
@Override
public void computeScroll() {
if (mScroller.computeScrollOffset()) {
scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
postInvalidate();
}
}
其中:
computeScrollOffset是Android***Scroller对象里的方法用来scrollTo和postInvalidate都是Android***View对象中的方法分别用来滑动到指点位置和重新绘制等。
在上述技术方案的基础上,步骤13,代码如下:
public void shrinkListItem(int position) {
((SlideView) getChildAt(position)).shrink();
}
其中position是指定的位置信息,getChildAt是Android***ViewGroup对象中的方法用来获取容器内指点位置的子布局,shrink是自定义SlideView对象中的方法用来关闭菜单。
在上述技术方案的基础上,步骤14,代码如下:
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
int x = (int) event.getX();
int y = (int) event.getY();
int position = pointToPosition(x, y);
if (position != INVALID_POSITION) {
MainActivity.MessageItem data = (MainActivity.MessageItem) getItemAtPosition(position);
mFocusedItemView = data.slideView;
Log.e(TAG, "FocusedItemView=" + mFocusedItemView);
}
}
}
if (mFocusedItemView != null) {
mFocusedItemView.onRequireTouchEvent(event);
}
return super.onTouchEvent(event);
}
其中pointToPosition是Android***ListView对象中的方法,用来获取指定坐标对应的列表位置,getItemAtPosition是Android***AdapterView对象中的方法,用来获取列表中指点位置的对象信息。onRequireTouchEvent是自定义SlideView中的方法用来处理滑动事件。
本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
Claims (7)
1.一种列表滑动删除的实现方法,其特征在于,包括如下步骤:
步骤1,自定义滑动布局类SlideView,用来提供可滑动删除的列表子布局,滑动布局类SlideView继承Android***线性布局LinearLayout;
步骤2,定义滑动监听接口OnSlideListener,用来提供滑动状态变化的回调;
步骤2中,滑动监听接口OnSlideListener提供三个常量参数用于表示当前的状态:
SLIDE_STATUS_OFF,是Android***的int类型的数据,
SLIDE_STATUS_START_SCROLL,是Android***的int类型的数据,
SLIDE_STATUS_ON,是Android***的int类型的数据,
滑动监听接口OnSlideListener提供一个抽象方法void onSlide(View view,intstatus),其中:
view是自定义滑动布局类SlideView类型的view,
status是当前的状态;
步骤3,定义变量mContext,用来提供上下文和初始化View,是Android***提供的Context类型的变量;
步骤4,定义变量mViewContent,用来放置列表内容,是Android***提供的线性布局LinearLayout类型的变量,
定义变量mHolder,用来放置滑动的菜单选项,是Android***提供的相对布局RelativeLayout类型的变量;
步骤5,定义滑动回调接口mOnSlideListener,用来向上层通知滑动事件,是定义滑动监听接口OnSlideListener类型;
步骤6,设定控制参数变量;
步骤7,初始化对象mScroller,赋值为Scroller(mContext),mContext是Android***提供的上下文对象,
设置布局方向,调用Android***线性布局LinearLayout里的方法setOrientation,设置线性布局为横向布局,
加载布局资源文件,调用Android***View对象提供的inflate方法来加载布局资源文件,存储于变量mViewContent中,
计算滑动菜单的宽度,存储于变量mHolderWidth中;
步骤7中,布局资源文件默认为在layout文件夹下定义好的布局资源文件R.layout.slide_view_merge,对应于当前自定义的SlideView对象;
步骤8,设置菜单按钮上的文字setButtonText、列表子条目的布局内容setContentView和滑动监听回调接口setOnSlideListener;
步骤9,当滑动事件event触发,计算滑动的距离是否大于设定的范围,大于则调用Android***View对象中的scrollTo方法计算滑动到指点坐标位置;
步骤10,判断是否滑动结束,结束则滑动到指点位置和重新绘制;
步骤11,定义ListViewCompat,继承Android***提供的ListView对象;
步骤12,定义变量mFocusedItemView,用来提供滑动效果,是自定义SlideView类型的变量;
步骤13,定义关闭指定位置滑动菜单的方法shrinkListItem;
步骤14,重写onTouchEvent方法进行事件的分化和滑动处理。
2.如权利要求1所述的列表滑动删除的实现方法,其特征在于:步骤4中,定义变量mScroller,用来提供弹性滑动效果,是Android***提供的Scroller类型的变量。
3.如权利要求1所述的列表滑动删除的实现方法,其特征在于:步骤6中,具体包括:
变量mHolderWidth,是Android***提供的int类型,用来控制滑动菜单的宽度,
变量mLastX、mLastY,是Android***提供的int类型,用来记录上次滑动的坐标位置,
常量TAN,是Android***提供的int类型,用来控制滑动角度,仅当满足设定条件下才进行滑动。
4.如权利要求1所述的列表滑动删除的实现方法,其特征在于:步骤7中,计算滑动菜单的宽度时,
用Android***Resources对象里的getDisplayMetrics函数来获取屏幕参数信息,
再用Android***布局对象提供的getResources函数来获取资源对象,
再用Android***TypedValue对象提供的单位转换的函数applyDimension来dp转px,
最后计算值用Android***Math类中的round方法来数学计算四舍五入。
5.如权利要求1所述的列表滑动删除的实现方法,其特征在于:默认通过函数shrink,把当前状态设置为关闭。
6.如权利要求1所述的列表滑动删除的实现方法,其特征在于:步骤9中,滑动事件event是Android***提供的MotionEvent类型的变量,
调用Android***MotionEvent对象里的方法getX和getY获取事件触发的x和y坐标值,
调用Android***View对象里的getScrollX方法来获取x轴方法移动的距离。
7.如权利要求1所述的列表滑动删除的实现方法,其特征在于:在步骤9之后,根据需要添加缓慢滚动到指定位置的滑动效果smoothScrollTo。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810336945.9A CN108646963B (zh) | 2018-04-16 | 2018-04-16 | 一种列表滑动删除的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810336945.9A CN108646963B (zh) | 2018-04-16 | 2018-04-16 | 一种列表滑动删除的实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108646963A CN108646963A (zh) | 2018-10-12 |
CN108646963B true CN108646963B (zh) | 2021-06-11 |
Family
ID=63746489
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810336945.9A Active CN108646963B (zh) | 2018-04-16 | 2018-04-16 | 一种列表滑动删除的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108646963B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109710425B (zh) * | 2018-12-19 | 2020-06-26 | 北京金山安全软件有限公司 | 一种消息监听方法和装置 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034731A (zh) * | 2012-12-20 | 2013-04-10 | 北京思特奇信息技术股份有限公司 | 一种生成Web前端交互页面的方法 |
CN105653246A (zh) * | 2014-11-14 | 2016-06-08 | Tcl集团股份有限公司 | 一种在Android***中横向列表的实现方法及装置 |
-
2018
- 2018-04-16 CN CN201810336945.9A patent/CN108646963B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103034731A (zh) * | 2012-12-20 | 2013-04-10 | 北京思特奇信息技术股份有限公司 | 一种生成Web前端交互页面的方法 |
CN105653246A (zh) * | 2014-11-14 | 2016-06-08 | Tcl集团股份有限公司 | 一种在Android***中横向列表的实现方法及装置 |
Non-Patent Citations (2)
Title |
---|
ListView滑动删除效果实现;Ricardo.M.Jiang;《CSDN,http://blog.csdn.net/whuhan2013/article/details/51416396》;20160515;第1-11页 * |
重写listview,横向滑动出现删除按钮,点击按钮删除item;HarryWeasley;《CSDN,http://blog.csdn.net/HarryWeasley/article/details/46224847》;20150529;第1-7页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108646963A (zh) | 2018-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
AU2013389985B2 (en) | User interface elements for multiple displays | |
Myers | User-interface tools: Introduction and survey | |
KR101838031B1 (ko) | 휴대용 단말기에서 아이콘 관리 방법 및 장치 | |
US20140195979A1 (en) | Interactive user interface | |
CN106648337B (zh) | 显示展示列表中内容的方法和装置、电子设备 | |
CN106030486B (zh) | 批量处理方法和终端 | |
CN106201241A (zh) | 终端屏幕的分屏显示方法、装置及终端 | |
JP2011070673A (ja) | プロセス制御システムのための動的リンク型グラフィカル・メッセージ | |
KR102027879B1 (ko) | 미디어 기기의 메뉴 제어 방법 및 장치와 그 방법에 대한 프로그램 소스를 저장한 기록 매체 | |
TW201337712A (zh) | 將用於經擴充的通訊服務的動態導覽欄對接和解除對接 | |
US20110190938A1 (en) | Robot teach pendant unit | |
CN113065082A (zh) | 数据处理方法、装置、电子设备及存储介质 | |
CN109840115A (zh) | 一种Android***中RecyclerView分页加载方法及装置 | |
CN112699362A (zh) | 登录验证方法、装置、电子设备及计算机可读存储介质 | |
CN108646963B (zh) | 一种列表滑动删除的实现方法 | |
CN112631939A (zh) | 用例配置方法、用例配置装置以及可读存储介质 | |
CN114518926A (zh) | 通知消息显示方法、装置、电子设备及介质 | |
JP6317433B2 (ja) | インタフェース機能の解析と表示方法、装置及びコンピュータ記憶媒体 | |
CN113885749A (zh) | 图标显示方法、装置及电子设备 | |
CN105137930A (zh) | 用于管理和配置自动化设施的现场设备的方法和装置 | |
CN113010059B (zh) | 应用程序图标管理方法、装置及电子设备 | |
CN107817930A (zh) | 一种桌面元素展示方法及装置 | |
CN109032728B (zh) | Ui界面显示方法、智能终端及计算机可读存储介质 | |
CN112114729A (zh) | 基于烹饪设备的悬浮窗交互控制方法、装置和烹饪设备 | |
CN112835665A (zh) | 任务栏应用的动态预览方法、***、装置及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |