/**
*
能够兼容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的时间滚轮控件。 首先,我们要理解时间滚轮控件的基本工作原理。它由一系列可滚动的数字或文本组成,用户可以通过上滑或下滑来选择他们需要的值...
仿Iphone版的Android时间选择器,可能是基于DialogFragment或者自定义View实现,它复刻了iOS设备上的时间选择样式,包括滑动选择小时和分钟的界面设计,以及可能的AM/PM切换选项。这样的设计能够使用户在Android设备...
描述中提到"安卓ScrollView分区域上下左右反弹,仿iphone反弹效果",这暗示我们需要对ScrollView进行扩展,增加边缘检测和弹性动画。在iOS中,这种效果通常是通过Cocoa Touch框架的内置机制实现的,而在Android中,...
在Android开发中,有时我们可能需要为应用添加类似iPhone的滚轮控件,以提供用户友好的选择体验。本文将详细介绍如何在Android平台上实现这样一个仿iOS滚轮控件,并进行源码分析,帮助开发者深入理解其工作原理。 ...
然而,原生的ScrollViewer控件在某些方面可能无法满足所有需求,特别是在尝试模拟移动设备,如iPhone和Android上的滚动体验时。这些设备通常具有更丰富的触摸交互特性,比如弹性滚动(overscrolling)和滚动动画,...
"Android仿iPhone滚动控件源码.zip"这个资源正是针对这一需求,它包含了一套用于Android平台的滚动控件实现,旨在模仿iPhone的滚动效果。这个源码包可以帮助开发者轻松地在Android应用中集成类似于iPhone的滚动效果...
这个压缩包“安卓Android源码——仿Iphone风格翻页控件,源码及Jar包.rar”正是提供了这样一个功能,即在Android应用中实现Iphone风格的翻页效果。下面将详细介绍这个控件的工作原理、实现方式以及如何在项目中集成...
在Android开发中,有时我们可能希望为应用添加类似iPhone的时间滚轮控件,以提供用户友好的时间选择体验。这个“Android 模仿iphone时间滚轮控件源码.zip”项目正好提供了这样的功能。让我们深入了解一下这个源码库...
在Android开发中,有时我们希望实现与iOS设备类似的交互效果,比如iPhone的时间滚轮控件。这个"Android模仿iPhone时间滚轮控件源码.zip"提供了实现这一功能的源代码,可以帮助开发者创建一个类似iOS时间选择器的组件...
在iOS开发中,ScrollView是苹果提供的一个非常重要的控件,用于展示内容超过屏幕尺寸的视图。ScrollView允许用户通过滑动来查看隐藏在屏幕之外的部分。在iPhone和iPad上,由于屏幕尺寸的不同以及多样的使用场景,...
总之,"android仿iphone日期时间选择控件"是一个旨在提升Android应用用户体验的组件,它实现了与iOS相似的日期时间选择功能。开发者通过自定义View,结合Android的触摸事件处理和动画API,成功地模拟了iOS的滚动选择...
在iOS开发中,UIPageControl是一个重要的基础控件,它主要用于指示用户当前查看的是一个可滚动视图(如UIScrollView)中的哪一页,并允许用户通过轻触来切换页面。对于初学者来说,理解并掌握UIPageControl的使用是...
这通常涉及到`TextView`、`ImageView`等视图控件,以及自定义的布局管理器。 2. **触摸事件处理**:为了实现滑动解锁功能,需要在Activity或Fragment中监听用户的滑动操作。这通常通过`GestureDetector`和`...
5. **配置UIPageControl**:UIPageControl是一个小的控件,通常位于ScrollView下方,显示当前页面和总页面数。将UIPageController关联到ScrollView,通过代理方法更新UIPageControl的值。 6. **实现...
在这个项目“(0147)-iOS/iPhone/iPAD/iPod源代码-滚动视图(ScrollView)-Styled PageControl”中,重点在于自定义PageControl来增强用户界面的视觉体验。 PageControl是iOS SDK中的一个小控件,通常与...
在iOS开发中,实现iPhone页面滑动主要涉及的是UIPageViewController和UIScrollView这两个核心组件。UIPageViewController用于创建一个可以翻页浏览多个视图控制器的容器视图,而UIScrollView则允许用户通过滑动手势...
自定义ToolBar意味着可以使用UIBarButtonItem或自定义UI控件来实现所需的功能布局和视觉样式。 6. **Auto Layout与Size Classes**: 为了适配不同尺寸的设备和屏幕方向,项目可能使用了Auto Layout和Size Classes来...
XXPageViewController是一款为iOS平台设计的自定义分页控件,它模仿了网易新闻首页的分页效果,提供了丰富的交互和视觉体验。在iOS开发中,分页控件是一种常见的UI元素,常用于展示多个视图或者内容板块,并且允许...
本文将深入探讨"(0024)-iOS/iPhone/iPad/iPod源代码-滚动视图(ScrollView)-Vertical Swipe Views"这个主题,包括如何实现垂直滑动切换页面以及上拉/下拉刷新功能。 首先,我们要理解UIScrollView的基本概念...
本知识点主要探讨如何利用UIScrollView控件来实现这一功能,因为ScrollView是iOS SDK中用于实现滚动效果的核心组件。 首先,我们需要了解UIScrollView的基本概念。UIScrollView是一个可滚动的视图容器,它可以包含...