相信大家在做OnGestureListener滑动切换窗口的时候,会遇到这样的问题。就是当界面中含有listview的时候,OnGestureListener的左右触屏滑动就被listview自己吃掉了。
翻看api帮助文档和自己的一些理解,决定从对listview重写开始,开解决这个头疼的问题。
以下是本人对ListView类的重写:
class GestureListView extends ListView {
public GestureListView(Context context) {
super(context);
}
@Override
public boolean onTouchEvent(MotionEvent ev) {
if(mLvDetector.onTouchEvent(ev)) return true;
return super.onTouchEvent(ev);
}
private GestureDetector mLvDetector = new GestureDetector(new OnGestureListener() {
//手指在屏幕上移动距离小于此值不会被认为是手势
private static final int SWIPE_MIN_DISTANCE = 120;
//手指在屏幕上移动速度小于此值不会被认为手势
private static final int SWIPE_THRESHOLD_VELOCITY = 200;
@Override
public boolean onDown(MotionEvent e) {
int position = pointToPosition((int)e.getX(), (int)e.getY());
if( position != ListView.INVALID_POSITION) {
View child = getChildAt(position - getFirstVisiblePosition());
if(child != null) child.setPressed(true);
}
return true;
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
if(e1.getX() - e2.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//left
Log.i("GestureDemo", "ListView left");
mVf.showNext();
return true;
}else if (e2.getX() - e1.getX() > SWIPE_MIN_DISTANCE && Math.abs(velocityX) > SWIPE_THRESHOLD_VELOCITY) {
//right
Log.i("GestureDemo", "ListView right");
mVf.showPrevious();
return true;
}
return false;
}
@Override
public void onLongPress(MotionEvent e) {
System.out.println("Listview long press");
int position = pointToPosition((int)e.getX(), (int)e.getY());
if( position != ListView.INVALID_POSITION) {
View child = getChildAt(position - getFirstVisiblePosition());
if(child != null) GestureListView.this.showContextMenuForChild(child);
}
}
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
return false;
}
@Override
public void onShowPress(MotionEvent e) {
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
return false;
}
});
}
分享到:
相关推荐
在Android应用开发中,"带有listview界面的滑动切换activity"是一种常见的交互设计,它提高了用户在多个页面间切换的便捷性。这种设计通常利用手势识别技术,特别是左右滑动手势,来实现Activity之间的平滑过渡。在...
在Android应用开发中,当前流行的设计趋势之一是采用带有底部导航菜单(Bottom Navigation)的主界面,辅以页面左右滑动的效果,以及ListView内嵌GridView的复合视图展示。这样的设计不仅提供了良好的用户体验,还...
本项目标题为“viewpager+listview”,描述指出它实现了左右滑动和上下滑动的功能,这通常用于创建一个可滚动的卡片式界面,用户可以在水平方向上切换不同的页面,每个页面又可以包含垂直滚动的内容。 **1. ...
本篇将重点讲解如何在ListView中添加一个带有左右切换功能的HeadView,这个功能通常在各大新闻客户端中用于显示广告图。 首先,我们需要理解HeadView的概念。在ListView中,HeadView是列表项的特殊类型,它可以视为...
在Android开发中,iewpager+fragment的组合常常用于构建可滑动切换的页面,而这里的“iewpager+fragment 卡片 上下滑动 viewpager带耳朵左右活动”则是一种特殊的交互设计,它结合了垂直滚动和平行滑动两种操作模式...
为了提升用户体验,可以加入各种过渡动画,如滑动切换Fragment的效果,以及消息发送时的向上弹出动画。Android的动画框架提供了丰富的API供开发者使用。 9. **通知和推送**: 微信的一个重要特点是实时性,因此...
1. **TabHost**: TabHost是Android中用于创建带有标签栏的布局的组件。它允许你在不同标签之间切换内容。然而,由于API 13后被弃用,我们不再直接使用它,而是通过其他方式模拟其功能。 2. **Fragment**: Fragment...
本教程将探讨如何利用`GestureDetector`类实现Activity的左右滑动功能,并在包含ListView的界面中应用这一技术,同时理解事件传递机制。 首先,`GestureDetector`是Android SDK中的一个关键工具,它允许开发者检测...
在Android开发中,导航菜单是应用界面不可或缺的一部分,它通常用于展示主要的功能模块,方便用户快速切换。在“android导航菜单横向左右滑动”的场景下,我们关注的是如何实现一个可左右滑动的水平滚动视图,即...
描述中提到的例子可能包括自定义的适配器、头尾视图(Header and Footer)、分组视图(Expandable ListView)或者带有动画效果的ListView。 首先,我们来了解一下ListView的基本用法。ListView通常配合Adapter使用...
ListView控件可以显示带有图像、复选框以及多列数据的列表。默认情况下,虽然ListView提供了基础的显示功能,但其样式相对单一,可能无法满足美观和用户体验的需求。 在这个增强美化版中,我们可能会看到以下改进:...
在Android的UI设计中,TabHost组件常用来创建带有标签页的应用界面,每个标签页下可以承载不同的内容。在Xamarin.Android中,我们可以通过TabLayout和ViewPager组合来实现这一功能。TabLayout用于展示标签,而...
圆角ListView还可以结合Android的动画库,实现滑动切换时的平滑过渡效果。另外,我们可以通过监听ListView的触摸事件,对圆角进行高亮或阴影处理,增加用户交互感。 6. **库的使用**: 除了手动实现外,Android...
3. **TabLayout**: TabLayout是Android设计支持库中的一个组件,常用于创建带有可滑动标签页的应用界面。在百度外卖首页的场景下,TabLayout可以用于展示不同的功能模块,如“热卖”、“新品”等,用户可以通过点击...
在Android开发中,分页是一种常见的用户界面设计技术,它允许用户逐步加载和查看大量数据,而不是一次性加载所有内容,从而提高应用性能和用户体验。本篇文章将深入探讨Android中的按钮分页与滑动分页机制。 一、...
`TabHost`是另一个用于创建带有可切换标签的布局的组件。它允许在同一个Activity中显示多个`Fragment`或`View`,并且通过标签栏让用户方便地在这些内容之间进行切换。在本项目中,`TabHost`被用来创建类似新浪新闻...
- 表情面板往往有多页,用户可以左右滑动切换。要实现这个效果,开发者可以使用ViewPager配合PagerAdapter,创建一个可以翻页的界面。 5. **触摸事件处理**: - 拖动缓冲效果意味着当用户在聊天界面快速上下滑动...
默认情况下,它可能会显示为一种带有阴影效果的颜色。将`android:cacheColorHint`设置为`#00000000`(透明色)可以消除滚动时的背景颜色,从而去除了顶部和底部的阴影效果。 2. `android:fadingEdge`:此属性用于...
- **TabHost**: TabHost是Android系统提供的一种组件,用于创建带有选项卡的界面。在QQ应用中,TabHost常用于切换不同的功能模块,如“聊天”、“联系人”、“发现”等。开发者需要自定义TabWidget(选项卡)和...
而“PagigListView”通常指的是带有下拉分页功能的ListView,这种实现方式能够帮助用户逐步加载更多的数据,提高应用性能并优化用户体验。`SlideMenu`则是一个侧滑菜单组件,常用于提供应用的主要导航选项,它可以从...