`
啵啵丹
  • 浏览: 7881 次
社区版块
存档分类
最新评论

scrollview 与自定义控件的上下滑动冲突 仿iphone时间控件 wheelview

阅读更多
/**
* 能够兼容ViewPager的ScrollView
* @Description: 解决了ViewPager在ScrollView中的滑动反弹问题
*/
public class ScrollViewExtend extends ScrollView {
    // 滑动距离及坐标
    private float xDistance, yDistance, xLast, yLast;
    public ScrollViewExtend(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onInterceptTouchEvent(MotionEvent ev) {
        switch (ev.getAction()) {
            case MotionEvent.ACTION_DOWN:
                xDistance = yDistance = 0f;
                xLast = ev.getX();
                yLast = ev.getY();
                break;
            case MotionEvent.ACTION_MOVE:
                final float curX = ev.getX();
                final float curY = ev.getY();
                   
                xDistance += Math.abs(curX - xLast);
                yDistance += Math.abs(curY - yLast);
                xLast = curX;
                yLast = curY;
                   
                if(xDistance > yDistance){
                    return false;
                }
        }
        return super.onInterceptTouchEvent(ev);
    }
}

这种解决方法虽然解决了两者横向滑动的冲突,但是的缺点在于,上下滑动无法让控件响应到。
所以在这里需要对ACTIOM_MOVE进行判断,可以对XY轴的移动坐标进行比较,
代码如下
/**
* 能够兼容ViewPager的ScrollView
* @Description: 解决了ViewPager在ScrollView中的滑动反弹问题
*/
public class ScrollViewExtend extends ScrollView {
// 滑动距离及坐标
private float xDistance, yDistance, xLast, yLast;

public ScrollViewExtend(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
switch (ev.getAction()) {
case MotionEvent.ACTION_DOWN:
xDistance = yDistance = 0f;
xLast = ev.getX();
yLast = ev.getY();
break;
case MotionEvent.ACTION_MOVE:
final float curX = ev.getX();
final float curY = ev.getY();

xDistance += Math.abs(curX - xLast);
yDistance += Math.abs(curY - yLast);
xLast = curX;
yLast = curY;
//如果X轴移动量大于Y轴的1.5倍及以上 则返回true scrollview滑动
if(xDistance> yDistance*1.5){
return true;
}else{
return false;
}
}

return super.onInterceptTouchEvent(ev);
}
}

分享到:
评论

相关推荐

    Android仿iPhone时间滚轮控件

    在这个项目中,我们将深入探讨如何在Android平台上实现一个仿iPhone的时间滚轮控件。 首先,我们要理解时间滚轮控件的基本工作原理。它由一系列可滚动的数字或文本组成,用户可以通过上滑或下滑来选择他们需要的值...

    Android 时间选择器,仿Iphone版

    仿Iphone版的Android时间选择器,可能是基于DialogFragment或者自定义View实现,它复刻了iOS设备上的时间选择样式,包括滑动选择小时和分钟的界面设计,以及可能的AM/PM切换选项。这样的设计能够使用户在Android设备...

    安卓ScrollView分区域上下左右反弹

    描述中提到"安卓ScrollView分区域上下左右反弹,仿iphone反弹效果",这暗示我们需要对ScrollView进行扩展,增加边缘检测和弹性动画。在iOS中,这种效果通常是通过Cocoa Touch框架的内置机制实现的,而在Android中,...

    android仿IPHONE滚轮控件实现及源码分析

    在Android开发中,有时我们可能需要为应用添加类似iPhone的滚轮控件,以提供用户友好的选择体验。本文将详细介绍如何在Android平台上实现这样一个仿iOS滚轮控件,并进行源码分析,帮助开发者深入理解其工作原理。 ...

    自定义ScrollViewer——仿iphone和android

    然而,原生的ScrollViewer控件在某些方面可能无法满足所有需求,特别是在尝试模拟移动设备,如iPhone和Android上的滚动体验时。这些设备通常具有更丰富的触摸交互特性,比如弹性滚动(overscrolling)和滚动动画,...

    Android仿iPhone滚动控件源码.zip

    "Android仿iPhone滚动控件源码.zip"这个资源正是针对这一需求,它包含了一套用于Android平台的滚动控件实现,旨在模仿iPhone的滚动效果。这个源码包可以帮助开发者轻松地在Android应用中集成类似于iPhone的滚动效果...

    安卓Android源码——仿Iphone风格翻页控件,源码及Jar包.rar

    这个压缩包“安卓Android源码——仿Iphone风格翻页控件,源码及Jar包.rar”正是提供了这样一个功能,即在Android应用中实现Iphone风格的翻页效果。下面将详细介绍这个控件的工作原理、实现方式以及如何在项目中集成...

    Android 模仿iphone时间滚轮控件源码.zip

    在Android开发中,有时我们可能希望为应用添加类似iPhone的时间滚轮控件,以提供用户友好的时间选择体验。这个“Android 模仿iphone时间滚轮控件源码.zip”项目正好提供了这样的功能。让我们深入了解一下这个源码库...

    Android 模仿iphone时间滚轮控件源码.zip源码资源下载

    在Android开发中,有时我们希望实现与iOS设备类似的交互效果,比如iPhone的时间滚轮控件。这个"Android模仿iPhone时间滚轮控件源码.zip"提供了实现这一功能的源代码,可以帮助开发者创建一个类似iOS时间选择器的组件...

    iphone ipad scrollview

    在iOS开发中,ScrollView是苹果提供的一个非常重要的控件,用于展示内容超过屏幕尺寸的视图。ScrollView允许用户通过滑动来查看隐藏在屏幕之外的部分。在iPhone和iPad上,由于屏幕尺寸的不同以及多样的使用场景,...

    android仿iphone日期时间选择控件

    总之,"android仿iphone日期时间选择控件"是一个旨在提升Android应用用户体验的组件,它实现了与iOS相似的日期时间选择功能。开发者通过自定义View,结合Android的触摸事件处理和动画API,成功地模拟了iOS的滚动选择...

    iphone 开发基础控件UIPageControl

    在iOS开发中,UIPageControl是一个重要的基础控件,它主要用于指示用户当前查看的是一个可滚动视图(如UIScrollView)中的哪一页,并允许用户通过轻触来切换页面。对于初学者来说,理解并掌握UIPageControl的使用是...

    Android源码——源码高仿IPhone锁屏.zip

    这通常涉及到`TextView`、`ImageView`等视图控件,以及自定义的布局管理器。 2. **触摸事件处理**:为了实现滑动解锁功能,需要在Activity或Fragment中监听用户的滑动操作。这通常通过`GestureDetector`和`...

    iphone自定义广告栏

    5. **配置UIPageControl**:UIPageControl是一个小的控件,通常位于ScrollView下方,显示当前页面和总页面数。将UIPageController关联到ScrollView,通过代理方法更新UIPageControl的值。 6. **实现...

    (0147)-iOS/iPhone/iPAD/iPod源代码-滚动视图(ScrollView)-Styled PageControl

    在这个项目“(0147)-iOS/iPhone/iPAD/iPod源代码-滚动视图(ScrollView)-Styled PageControl”中,重点在于自定义PageControl来增强用户界面的视觉体验。 PageControl是iOS SDK中的一个小控件,通常与...

    iphone页面滑动

    在iOS开发中,实现iPhone页面滑动主要涉及的是UIPageViewController和UIScrollView这两个核心组件。UIPageViewController用于创建一个可以翻页浏览多个视图控制器的容器视图,而UIScrollView则允许用户通过滑动手势...

    IOS scrollview做的相册

    自定义ToolBar意味着可以使用UIBarButtonItem或自定义UI控件来实现所需的功能布局和视觉样式。 6. **Auto Layout与Size Classes**: 为了适配不同尺寸的设备和屏幕方向,项目可能使用了Auto Layout和Size Classes来...

    XXPageViewController分页控件

    XXPageViewController是一款为iOS平台设计的自定义分页控件,它模仿了网易新闻首页的分页效果,提供了丰富的交互和视觉体验。在iOS开发中,分页控件是一种常见的UI元素,常用于展示多个视图或者内容板块,并且允许...

    (0024)-iOS/iPhone/iPAD/iPod源代码-滚动视图(ScrollView)-Vertical Swipe Views

    本文将深入探讨"(0024)-iOS/iPhone/iPad/iPod源代码-滚动视图(ScrollView)-Vertical Swipe Views"这个主题,包括如何实现垂直滑动切换页面以及上拉/下拉刷新功能。 首先,我们要理解UIScrollView的基本概念...

    Ios水平滑动View

    本知识点主要探讨如何利用UIScrollView控件来实现这一功能,因为ScrollView是iOS SDK中用于实现滚动效果的核心组件。 首先,我们需要了解UIScrollView的基本概念。UIScrollView是一个可滚动的视图容器,它可以包含...

Global site tag (gtag.js) - Google Analytics