最近在开发中遇到HorizontalScrollView嵌套ScrollView导致滑动卡的情况,急横向水平滑动的View和垂直水平滑动的View,都在接收处理滑动时间,但是这种情况下触摸事件就会发生冲突。导致滑动非常卡,甚至出现程序停止响应。这种情况下我们需要重写view。下面是两个简单的例子,重写水平滑动View只接收水平方向上滑动的事件。我们使用手势GestureDetector来作区分。完整的源码请参考附件。
public class CustomHScrollView extends HorizontalScrollView{
private GestureDetector mGestureDetector;
private View.OnTouchListener mGestureListener;
private static final String TAG = "CustomHScrollView";
/**
* @function CustomHScrollView constructor
* @param context Interface to global information about an application environment.
*
*/
public CustomHScrollView(Context context) {
super(context);
// TODO Auto-generated constructor stub
mGestureDetector = new GestureDetector(new HScrollDetector());
setFadingEdgeLength(0);
}
/**
* @function CustomHScrollView constructor
* @param context Interface to global information about an application environment.
* @param attrs A collection of attributes, as found associated with a tag in an XML document.
*/
public CustomHScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
mGestureDetector = new GestureDetector(new HScrollDetector());
setFadingEdgeLength(0);
}
/**
* @function CustomHScrollView constructor
* @param context Interface to global information about an application environment.
* @param attrs A collection of attributes, as found associated with a tag in an XML document.
* @param defStyle style of view
*/
public CustomHScrollView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
mGestureDetector = new GestureDetector(new HScrollDetector());
setFadingEdgeLength(0);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
return super.onInterceptTouchEvent(ev) && mGestureDetector.onTouchEvent(ev);
}
// Return false if we're scrolling in the y direction
class HScrollDetector extends SimpleOnGestureListener {
@Override
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {
if(Math.abs(distanceX) > Math.abs(distanceY)) {
return true;
}
return false;
}
}
}
分享到:
相关推荐
android系统是目前最好的手机系统,但...本站这里提供的合集总共包含了141章节的API和12篇开发者指南,以及以往发行的所有合集内容。除了翻译原文外,合集包还额外附上截图、相关文章链接和示例代码,增强译文可读性。
基于回溯算法 在AS上开发的数独游戏 使用Java
此资源文件主要实现了动态查看Cpu利用率以及Memory利用率。在不同的机型上通过top命令查看,有些机型总是为出现一直为0的情况。而此资源另辟蹊径,更大程度上兼容了市面上所有的机型。
语音转文字 Androiod语音转文本示例应用程序语音转文本使用android内置语音转文本功能
NULL 博文链接:https://l12052124.iteye.com/blog/758380
http://blog.csdn.net/wuchuang127/article/details/39673027
实例中主要实现上传文件至Server的方法,允许Input、Output,不使用Cache,使Androiod上传文件变得轻松。 主要功能代码如下: package com.test; import java.io.DataOutputStream; import java.io.FileInputStream...
Android 多个service的action 相同冲突 验证demo,对应博客地址是http://blog.csdn.net/czlove110/article/details/50791390
Androiod 桌面Widget开发的一个的示例
本资料包只是针对大学开设Android studio课程,由以王英强老师编写的Android studio移动开发与设计,内含源码及安装包(apk)和实训报告,供大家学习参考!
这是用C#写的Androiod应用小程序,通过扫描图书上的条码可以到国家图书馆网站获取相应数据的书目信息
最新的Android API文档,里面包含android的最新内容,包括OpenGL ES 3.0等API。欢迎下载。内容最全。
Android语言切换的Demo实例代码,Android语言切换的Demo实例代码,Android语言切换的Demo实例代码,
高仿微信5.2.1主界面及消息提醒(fragment+viewPager+BadgeView)
json "result": [{ "cityId": "2", "cityName": "安徽", "provinceId": "2" }, { "cityId": "45", "cityName": "黄山", "provinceId": "2" }, { "cityId": "42", "cityName": "合肥", ... },
android 新浪微博
JNI手册,介绍JNI的使用 android JNI框架的搭建。