`
Hawkes
  • 浏览: 75490 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Androiod中解决HorizontalScrollView和ScrollView相互嵌套导致滑动卡的方法

阅读更多
最近在开发中遇到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;
       }
   }

}
分享到:
评论

相关推荐

    androiod中文api文档

    android系统是目前最好的手机系统,但...本站这里提供的合集总共包含了141章节的API和12篇开发者指南,以及以往发行的所有合集内容。除了翻译原文外,合集包还额外附上截图、相关文章链接和示例代码,增强译文可读性。

    回溯算法之Androiod数独游戏

    回溯算法是一种试探性的解决问题的方法,它尝试逐步构建解决方案,每一步都检查当前解是否可行。如果当前解不可行,算法就会撤销这一步,尝试其他可能的路径,直到找到正确的解或所有路径都尝试完毕。在数独问题中,...

    Android 与flutter混合开发以及消息传递示例

    在移动应用开发领域,Flutter和Android的混合开发已经成为一种常见的技术选择。Flutter是Google推出的一种高性能、高效率的跨平台UI工具包,可以用于构建iOS和Android应用。Android则是全球最受欢迎的智能手机操作...

    Androiod代码实现实时监控Cpu利用率、Memory利用率完整代码实现

    在Android开发中,实时监控设备的CPU利用率和内存利用率是一项重要的任务,可以帮助开发者优化应用性能,防止因资源消耗过大导致的卡顿或崩溃。本文将详细介绍如何通过代码实现在Android设备上动态监测CPU和内存使用...

    Android 多个service的action 相同冲突 验证demo

    在Android开发中,Service是应用程序组件之一,用于在后台执行长时间运行的操作,即使用户与应用程序交互界面不直接关联。在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service...

    Android 桌面组件【app widget】 进阶项目--心情记录器

    在这个进阶项目“Android桌面组件【app widget】—心情记录器”中,我们将深入探讨如何创建一个能够帮助用户便捷记录和展示心情的小部件。 首先,我们需要理解App Widget的基本构成。一个App Widget通常包含以下几...

    高仿微信5.2.1主界面及消息提醒(fragment+viewPager+BadgeView)

    通过学习和实践这样的项目,Android开发者不仅可以掌握Fragment、ViewPager和BadgeView的用法,还能深入理解Android界面设计原则和用户体验的提升方法。这将对他们的职业生涯产生积极的影响,尤其是在构建复杂、交互...

    WidgetDemo.rar

    这个压缩包可能包含了源代码、资源文件、以及必要的配置文件,帮助开发者了解并学习如何在Android应用中创建和使用Widget。 【描述】"http://blog.csdn.net/wuchuang127/article/details/39673027" 指向的是中国...

    SpeechToText:Androiod语音转文本示例应用程序

    此外,别忘了在不需要语音识别时调用`stopListening()`和`destroy()`方法,以便释放资源: ```java speechRecognizer.stopListening(); speechRecognizer.destroy(); ``` 对于项目中的`SpeechToText-master`压缩包...

    Android实现上传文件功能的方法

    实例中主要实现上传文件至Server的方法,允许Input、Output,不使用Cache,使Androiod上传文件变得轻松。 主要功能代码如下: package com.test; import java.io.DataOutputStream; import java.io.FileInputStream...

    Android代码-Android自定义相机实现身份证拍照,并加入自动对焦与图片不规则裁剪

    在需要使用的module中添加依赖 dependencies { compile 'com.github.wildma:IDCardCamera:1.0.1' } 或者引用本地lib compile project(':idcardcamera') Step 3. 调用CameraActivity类的toCameraActivity方法打开...

    Android语言切换Demo

    在Android开发中,实现语言切换是一项重要的功能,它允许用户根据自己的需求选择应用程序显示的语言。本Demo主要展示了如何在Android应用中实现这一功能。我们将会深入探讨以下几个关键知识点: 1. **多语言支持** ...

    android新浪微博

    6. **事件监听和回调**:在微博应用中,用户的各种操作(如点赞、评论、分享)需要响应,这涉及事件监听器的设置和回调函数的编写。同时,对于网络请求的结果,也需要通过回调处理成功或失败的情况。 7. **图片加载...

    Android 4.4 API

    **Android 4.4 API**,也被称为KitKat版本,是Android操作系统的一个重大更新,带来了许多新特性和改进。此API文档是开发者了解和利用这些更新的关键资源,它详尽地阐述了Android 4.4的功能和编程接口。以下是这个...

    地图旅游.txt

    json "result": [{ "cityId": "2", "cityName": "安徽", "provinceId": "2" }, { "cityId": "45", "cityName": "黄山", "provinceId": "2" }, { "cityId": "42", "cityName": "合肥", ... },

    JNI完全技术手册

    JNI手册,介绍JNI的使用 android JNI框架的搭建。

Global site tag (gtag.js) - Google Analytics