首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

2014-11-8Android学习------Android抽屉效果的实现案例--------动画Animation学习篇

:delta为整个视图的高度 如果抽屉方向是水平的话:delta为整个视图的宽度 接下来就是在画布上如何显示这个抽屉了,也是按照方向来的: if (mOrientation == VERTICAL...) { canvas.translate(0, delta); } else { canvas.translate(delta, 0); } 如果抽屉方向是垂直的话:画布水平移动...0个像素,即水平方向不动;画布垂直方向移动视图的高度,即垂直方向跟界面同高 如果抽屉方向是水平的话:画布水平移动视图的宽度个像素,即水平方向跟界面同宽;垂直方向移动0个像素,即垂直方向不动 说到这里...,设置手势滑动的范围 setInitialPosition = false;//然后将方向设置为false // for offsetLocation we have to invert...velocityY : velocityX;//速度的设置看方向是Y方向的还是X方向的,如果是垂直方向,就是Y方向,如果不是垂直就是水平,那么就是X方向 post(startAnimation);

1.5K20

豆瓣电台WP7客户端 开发记录5

废话不多说,上代码: 首先在主界面的构造函数里放上: 表示监听水平手势  TouchPanel.EnabledGestures = GestureType.HorizontalDrag;  你可以这样多监听几个手势...,比如水平滑动一下,这其实会触发一连串的手势,注意是一连串,不是一个。...因为你水平滑动一下,不可能是绝对的水平的,还可能带着其他的动作,比如VerticalDrag垂直滑动。而且也不是一个水平滑动跟一个其他活动。都可能有好几个。...所以我上面的代码严格来说是不严谨的,因为可能垂直滑动中有那么一个水平滑动就够触发下一首的事件了,不过我在开始的时候就只是指定监听HorizontalDrag。...这个时候能进循环其实就已经说明是水平滑动了。如果你多监听几个手势,你会发现垂直滑动事件也会触发了。

38510
您找到你想要的搜索结果了吗?
是的
没有找到

Android开发笔记(四十五)手势事件

滑动冲突的处理 app功能多起来之后,页面上有多个控件是可以滑动的,比如说ScrollView、下拉刷新、ViewFlipper、ViewPager等等,有的需要处理上下滑动手势,有的需要处理左右滑动手势...2、在底层控件中,如果当前手势还未处理完成,那么必须阻止上级视图手势拦截。...下面示例代码演示了这么一个意图:当用户按下或者滑动时,当前控件需要响应手势事件,请上级视图不要拦截手势;当用户松开或取消时,当前控件已经处理完毕,允许上级视图拦截手势。...下面示例代码演示了ScrollView拦截垂直滑动而放过水平滑动的功能: import android.annotation.SuppressLint; import android.content.Context...= false; // false传给子控件(点击事件) } else if (mOffsetX < mOffsetY) { result = true; // true不传给子控件(垂直滑动

1.2K30

HorizontalScrollView扩展总结

ScrollView相信大家都已经比较熟悉了,它是支持垂直滚动的,在开发中经常使用到,与垂直滚动相对的就是水平滚动HorizontalScrollView,有时我们在进行页面切换的时候也会用到HorizontalScrollView...此扩展HorizontalScrollView有如下特点: (1) 可禁用手势滑动,只能通过调用scrollBy,scrollTo,smoothScrollBy, smoothScrollTo来滑动(因为每个步骤切换是通过点击下一步...,而不能手势滑动) (2) 也支持手势滑动 (3) 支持滑动监听(滑动动作完成后才去更新步骤状态) 主要实现过程: (1) 继承HorizontalScrollView (2) 增加自定义方法public...ev) 如果支持手势滑动,如果有设置滚动监听监听滚动,同时调用父类HorizontalScroll的onTouch; 如果不支持手势滑动,则直接return true直接将touch事件交给子...* (1)可设置是否允许手势触摸滚动(默认是支持手势触摸滚动的) * (2)支持滚动状态监听 * * @author Lue * */ public class MyHorizontalScrollView

75310

Android开发笔记(一百零一)滑出式菜单

可是LinearLayout作为水平展示时有点逗,因为如果下面有两个子视图的宽度都是match_parent,那么LinearLayout只会显示第一个子视图,第二个子视图却是怎么拉也死活显示不了。...所以我们可以给视图添加触摸监听器OnTouchListener,在触摸坐标发生变化的同时,给菜单子页面隐入隐出对应的宽度,从而达到抽屉式拉出菜单的效果。...一旦触摸弹起,根据手势滑动的距离,判断当前是要拉出整个菜单,还是缩回才拉出一部分的菜单。...现在有个开源的HorizontalListView,它是水平滚动的列表视图,如果该视图只有两列,左边一列作为菜单页面,右边一列作为内容页面,这就很类似侧滑菜单的功能。...当然,要把HorizontalListView作为侧滑菜单来使用,我们还需要对其做下列改造: 1、在手势松开的时候,根据当前的滑动偏移,自动判断接下来是往左滑动对齐,还是往右滑动对齐。

1.1K70

Android开发艺术笔记 | View的事件体系

另外,如在水平方向上, 手指逆着坐标系的正方向(从右往左滑动)滑动,所产生的速度为负值, 顺着正反向(从左往右滑动)滑动,所产生的速度为正值。...,即水平速度 float yVelocity = velocityTracker .getYVelocity();//得到的是1000ms内手指在垂直方向从上向下滑过的像素数,即垂直速度 注意, 获取速度之前必须先计算速度...10像素/每100ms(这里假设滑动过程是匀速的), 即水平速度为10。...概念:手势检测,用于辅助检测用户的单击、滑动、长按、双击等行为。...建议, 如果只是监听滑动相关的,建议自己在onTouchEvent中实现, 如果要监听双击这种行为的话,那么就使用GestureDetector。

60630

Android开发笔记(一百六十四)仿京东首页的下拉刷新

鉴于App首页基本采用滚动视图ScrollView实现页面滚动功能,故而该问题就变成了如何监听视图滚到顶部或者滚到底部。...新的上层视图需要完成以下三项任务: 一、在下层视图的最前面自动添加一个下拉刷新头部,保证该下拉头部位于整个页面的最上方; 二、给前面自定义的滚动视图注册滚动监听器和触摸监听器,其中滚动监听器用于处理到达顶部...三、重写触摸监听器接口需要实现的onTouch函数,这个是重中之重,因为该函数包含了所有的手势下拉跟踪处理。...既要准确响应正常的下拉手势,也要避免误操作不属于下拉的手势,比如下面几种情况就得统筹考虑: 1、水平方向的左右滑动,不做额外处理; 2、垂直方向的向上拉动,不做额外处理; 3、下拉的时候,如果尚未拉到页面顶部...,也不做额外处理; 4、拉到顶之后继续下拉,则隐藏工具栏的同时,还要让下拉头部跟着往下滑动; 5、下拉刷新过程中松开手势,判断下拉滚动的距离,距离太短则直接缩回头部、不进行页面刷新;只有距离足够长,才能触发页面刷新动作

2.8K40

UITableView在Flutter中是什么?

ListView 在Flutter中,ListView可以沿一个方向(垂直或者水平方向)来排列其所有子Widget,因此常被用于需要展示一组连续视图元素的场景,比如通讯录、优惠券、商家列表等。...除了默认的垂直方向布局之外,ListView还可以通过设置 scrollDirection 参数支持水平方向布局。...但是,对于某些特殊交互场景,比如多个效果联动、嵌套滚动、精细滑动视图跟随手势操作等,还需要嵌套多个ListView来实现。...这时,各自视图的滚动和布局模型就是相互独立、分离的,就很难保证整个页面统一一致的滑动效果。 那么,Flutter是如何解决多ListView嵌套时,页面滑动效果不一致的问题的呢?...ListView组件,同时支持垂直方向和水平方向滚动,不仅提供了少量一次性创建子视图的默认构造方法,也提供了大量按需创建子视图的ListView.builder机制,并且支持自定义分割线。

5.5K10

阅读器多种翻页的设计与实现

分解UI层的实现,整个动画可以用以下流程来表示: 1、页面初始化,直接显示页面,监听用户pan手势; 2、用户pan手势开始,根据方向确定左滑还是右滑,获取新的VC; 3、处理用户左右滑动视图跟随用户滑动...这是因为pan手势在切后台时会自动cancel,所以需要在手势处理增加对cancel状态的处理。 4、上下滑动 上下滑动同样没有系统库支持,需要手动实现。...效果分解: 1、当用户滑动的过程,视图要跟随手指的移动; 2、当用户往上滑然后松开时,视图要带有加速度的往上滑动;(附加特性:在滑动过程中用户可以通过重复这个行为加速滑动) 3、在视图滑动的过程中...通常iOS实现滑动会有两大选择:UIScrollView和UITableView;(UICollectionView和UITableView类似) UIScrollView存在一个较大的局限:上面的视图资源无法回收利用...同理,我们可以处理向上滑动的情况。至此,我们可以不依赖UITableView完成无限视图的滚动,同时避免各类touch事件处理和加速度计算。 ?

3.1K10

嵌套滑动通用解决方案--NestedScrollingParent2

* @param target 具体嵌套滑动的那个子类 * @param dx 水平方向嵌套滑动的子View想要变化的距离 * @param dy 垂直方向嵌套滑动的子...* @param dx 水平方向嵌套滑动的子View想要变化的距离 * @param dy 垂直方向嵌套滑动的子View想要变化的距离 dy0 向上滑动...* @param dx 水平方向嵌套滑动的子View想要变化的距离 * @param dy 垂直方向嵌套滑动的子View想要变化的距离 dy0 向上滑动...水平方向嵌套滑动的子View滑动的距离(消耗的距离) * @param dyConsumed 垂直方向嵌套滑动的子View滑动的距离(消耗的距离) * @param dxUnconsumed...水平方向嵌套滑动的子View未滑动的距离(未消耗的距离) * @param dyUnconsumed 垂直方向嵌套滑动的子View未滑动的距离(未消耗的距离) * @param type

3.6K31

【Android 内存优化】自定义组件长图组件 ( 长图滚动区域解码 | 手势识别 GestureDetector | 滑动计算类 Scroller | 代码示例 )

自定义组件中设置手势识别类 : ① 手势监听器实现 : 自定义组件实现 GestureDetector.OnGestureListener 接口 , 并重写 onDown , onShowPress ,...onTouch 方法 ; ③ 创建手势识别对象 : 创建 GestureDetector 对象 , 传入本组件作为手势监听器 ; mGestureDetector = new GestureDetector...e2 当前事件 MOVE 事件 * @param distanceX 水平方向移动距离 * @param distanceY 垂直方向移动距离 * @return...DOWN 事件 * @param e2 当前事件 MOVE 事件 * @param distanceX 水平方向移动距离 * @param distanceY 垂直方向移动距离...e2 当前事件 MOVE 事件 * @param distanceX 水平方向移动距离 * @param distanceY 垂直方向移动距离 * @return

1.5K22

Flutter实现App功能引导页

我们来一步一步实现上面的界面,左右滑动切换显示功能页,这个可以通过PageView来实现,底部的指示符半透明覆盖在PageView上,开发过Android同学知道可以用Framelayout布局来实现,...现在讲完了这些装修,就剩下三个点了,三个点在同一水平线上,所以我们用Row来做为父控件,Row有几个属性值注意 mainAxisAlignment 主轴对齐方式,Row的主轴是水平方向, crossAxisAlignment...主轴的垂直方向对齐方式,Row的主轴是水平方向,所以该字段表示上下对齐方式 mainAxisSize 主轴方向的大小,对Row来说即宽度 与Row对应的控件是Column,其对应上面属性刚好相反...onPageChanged就是PageView换页的事件,这里需要调用setState从而使Widget重建更新当前页的点颜色 到这里为止就剩下点击点更新PageView的功能了,我们来实现点击功能,就是监听点击手势...opaque 表示整个区域,被遮挡的子视图不能响应 deferToChild 表示点击到子视图才响应,手势默认behavior 需要实现点击左半部分向前翻页,点击后半部分向后翻页,我们需要判断当前点击的区域

2K10

Flutter | 事件处理

onTop 和 onDoubleTap 时,当用户触发 tap 事件时,会有 200 毫秒的延时,这是因为可能会再次点击触发双击事件 如果只监听了 onTap,则不会有延时 拖动,滑动 一次完整的手势过程是指用户手指按下到抬起的整个过程...GestureDetector 会把要监听的组件的原点(左上角)作为本次手势的原点,当监听组件上手指按下时,手势识别就会开始。...竞争 如在上例中,同时监听水平方向和垂直方向的拖动事件,那么斜着滑动时那个方向会生效?...}, ), ) ], ); } 复制代码 运行之后,每次拖动只会沿着一个方向移动,而竞争者发生在手指按下后首次移动时 上例中获胜的条件是,首次移动时的位置在水平垂直方向上分量大的一个获胜...但是由于轮播组件中本身可能已经处理了拖动手势,甚至支持了缩放手势,这时外部如果再用 onTapDown,onTap 来监听是不行的。

2.7K10

Material Design — 网格列表(Grid lists)

网格列表 网格列表(Grid lists) 网格列表是标准列表视图的替代方法。 Grid lists由以垂直水平布局排列的cell重复后组成。 Grid lists最适用于同质数据类型。...浏览路径 一个grid list由在其内部的垂直水平排列的重复cells组成。 Tiles可容纳内容,并可垂直水平地涵盖一个或多个cells。 ?...操作可以打开后续的视图,如一张card。 主要操作 ·填充整个tile,因此不会通过图标或文字的形式呈现 ·在一个特定grid list中的所有tile中都保持一致。...手势 不允许对每个tile进行滑动(swipe)操作。拾取并移动(Pick-up-and-move)行为是不鼓励的。...尺寸和调整大小 调整grid list的大小会导致tiles在水平空间变为可用时重新排序。全屏的grid list会调整大小以适应屏幕宽度。 水平空间收缩时,grid list不会转换为list。

3.5K120

Android中文API——ScrollView

如果此视图为焦点视图,将为自己发送。否则,会为当前焦点路径的下一个节点发送。此方法也会激起一个key监听器。...public void fling (int velocityY) 滚动视图滑动(fling)手势。...(译者注: 如何监听android的屏幕滑动停止事件) 参数 velocityY Y方向的初始速率。正值表示手指/光标向屏幕下方滑动,而内容将向上滚动。...Down事件或者由视图组的一个子视图处理,或者被用户自己的onTouchEvent()方法处理;此处理意味你应该执行onTouchEvent()时返回true,这样才能继续看到剩下的手势(取代找一个父视图处理...参数 child             需要测量的子视图 parentWidthMeasureSpec       当前视图要求的宽度 widthUsed    水平方向上由父视图使用的空白 (

4.5K30

Flutter 可以缩放拖拽的图片

这个场景需要关注的是手势的冲突问题,PageView里面是有水平或者垂直手势的,会跟onScaleStart/onScaleUpdate/onScaleEnd有冲突。...最开始想的是手势应该有冒泡,是不是可以我监听到了之后,不像上冒泡,这样可以阻止PageView里面的滑动行为,最后结论是没有方法能阻止冒泡。...首先我看了下PageView关于滚动的源码,直接指向最终ScrollableState里面的代码,在setCanDrag方法里面根据是否可以Drag,准备了水平/垂直手势。.../垂直手势)。...当图片是放大状态而且水平或者垂直能够滑动的时候,我们需要_drag停止下来,以防止直接滑动到上一个或者下一个图片 DragEndDetails(primaryVelocity: 0.0),并且根据惯性让图片在范围内继续惯性滑动

4.8K00

Android 可拖动悬浮窗实现

当时同事给的建议用 ViewDragHelper 来实现(原谅没玩过这个东西,网上看了下教程挺牛逼的,算了,还是选择用手势监听做吧),首先先给大伙看下最终的项目实现效果(模拟器上可能会卡顿,实际的运行效果还是很流畅的...可能文字表达不够明确,贴一张手绘原理图 原理图 接下来就是代码一波流了,首先定义一个手势监听回调类,主要用来判断 indicatorView 的滑动的距离以及方向,然后悬浮窗可以根据 indicatorView...scrollX) { } } 定义完手势回调,就需要定义用来监听拖动手势的 indicatorView 啦,其主要作用是当焦点落到 indicatorView 的时候,通过用户的手势来拖动悬浮窗活动...,则是水平滑动,否则是垂直滑动 if (x_abs >= y_abs && x_abs > X_SLOP) { // 如果 x 的滑动距离大于 0...接着就需要实现对的 indicatorView 做手势监听 mTouchView.setOnTouchListener(new OnTouchListener() { @Override

1.9K21

Flutter:手把手教你实现一个仿QQ侧滑菜单

);   slideDirection属性用来控制菜单从哪个方法打开;调用key.currentState.openOrClose()方法可以手动打开或关闭菜单;配合transform属性和滑动过程中返回的监听值...2.上层布局的实现 Step 1 注册手势监听Recognizer   首先,我们给我们的自定义布局注册手势监听Recognizer,_registerGestureRecognizer()方法在布局的...animationController.value = ······; }); _registerGestureRecognizer(); super.initState(); } 很明显,用户的手势滑动时会产生一个滑动值...Step 3 构建基本控件   所以,build函数的返回值就很好定义了,因为有手势,我们最外层包裹一个RawGestureDetector,然后将我们在Step 1中注册的gestures传进去,表示这个控件之后将会接收垂直.../水平方向的gestures。

2K10
领券