Android自定义View探索(二)—常用工具

  • 时间:
  • 浏览:0

Scroller:

VelocityTracker :

除了哪些常见的操作,ViewDragHelper还可不可不都能不能实现:抽屉拉伸,拖拽现在现在开始了松手后子View自动返回到原位等复杂化操作。

第其他:scrollTo()和scrollBy()的关系

先看scrollBy( )的源码

比如其他人对于没办法 TextView调用scrollTo(0,25) ;没办法 该TextView中的content(比如显示的文字:Hello)会为社 移动呢?

向下移动2五个单位?不!恰好相反!!这是为哪些呢?

意味着着着调用该最好的办法会意味着着视图重绘,即会调用

第三步:将Touch事件交给GestureDetector处理

比如将Activity的Touch事件交给GestureDetector处理

可不可不都能不能利用ViewConfiguration的静态最好的办法获取没办法 实例

ViewConfiguration提供了其他自定义控件用到的标准常量,比如尺寸大小,滑动距离,敏感度等等。

VelocityTracker用于跟踪触摸屏事件(比如,Flinging及其他Gestures手势事件等)的传输数率。

接下来会带来哪几次自定义View的实战,下一篇文章见~~~

第二步:生成GestureDetector对象

Scroller挺常见的,用的比较多了。在此只强调哪几次重要的问題图片,别的就不再赘述了。

第二点:scroll的本质

scrollTo( )和scrollBy( )移动的而是View的内容,或者我View的背景是不移动的。

第三步:解除传输数率追踪

这里的GestureListenerImpl而是GestureListener监听器的实现。

Configuration:

这而是说scrollBy( )调用了scrollTo( ),最终起作用的是scrollTo( )最好的办法。

第一步:现在现在开始了了传输数率追踪

在这里其他人初始化VelocityTracker,或者我把要追踪的MotionEvent注册到VelocityTracker的监听中。

本文转载自:自定义View系列教程01–常用工具介绍

(1) ViewDragHelper接管了ViewGroup的事件拦截

(2) ViewDragHelper接管了ViewGroup的Touch事件

(3) ViewDragHelper处理了拖拽子View时的边界越界

(4) ViewDragHelper监听拖拽子View时的情形变化

其他人可不可不都能不能采用如下最好的办法来获取时需的相关信息:

ViewConfiguration:

public void invalidate(int l, int t, int r, int b)

ViewConfiguration viewConfiguration=ViewConfiguration.get(context);

一齐看看为社 使用的:

同理可不可不都能不能获取1秒内Y方向所滑动像素值

ViewDragHelper的使用未必复杂化,在此通过没办法 示例展示其常用的用法。

GestureDetector gestureDetector = new GestureDetector(context,new

GestureListenerImpl());

Configuration用来描述设备的配置信息。比如用户的配置信息:locale和scaling等等 ,比如设备的相关信息:输入模式,屏幕大小, 屏幕方向等等。

第一步:实现OnGestureListener

介绍ViewConfiguration的哪几次对象最好的办法:

其中tmpr是没办法 Rect,this是没办法 的View;通过这两行代码就把View在没办法 Rect中重绘。

请注意第一行代码:

没办法 的l和r均减去了scrollX

没办法 的t和b均减去了scrollY

而是说scrollX意味着着着是正值,没办法 重绘后的View的层厚反而减少了;反之同理

而是说scrollY意味着着着是正值,没办法 重绘后的View的层厚反而减少了;反之同理

而是,TextView调用scrollTo(0,25)和其他人的理解相反

此处的l,t,r,b五个参数就表示View没办法 的坐标.

在该最好的办法中最终会调用:

第二步:获取追踪到的传输数率

ViewDragHelper:

GestureDetector是Android给其他人提供的没办法 手势处理的工具,利用GestureDetector可不可不都能不能复杂化其他操作,轻松实现其他常用的功能。

在自定义View的之后,常常会用到其他Android系统提供的工具。哪些工具封装了其他人总是会用到的最好的办法,比如拖拽View,计算滑动传输数率,View的滚动,手势处理等等。意味着着着其他人个人去实现哪些最好的办法会比较繁琐,或者我容易出其他bug。而是了解熟悉哪些常用的工具,对其他人后续的学习和工作有很大帮助。

在该例中ViewDragHelper做了如下主要操作:

在项目中而是场景时时需户手指拖动其内内外部的某个View,此时就时需在onInterceptTouchEvent()和onTouchEvent()这没办法 最好的办法中写不少逻辑了,比如处理:拖拽移动,越界,多手指的按下,加传输数率检测等等。

ViewDragHelper可不可不都能不能极大的帮其他人复杂化类似于的处理,它提供了一系列用于处理用户拖拽子View的辅助最好的办法和与其相关的情形记录。比较常见的:QQ侧滑菜单,Navigation Drawer的边缘滑动,都可不可不都能不能由它实现。

从这种 例子可不可不都能不能看出来ViewDragHelper是作用在ViewGroup上的(比如LinearLayout)而时需直接作用到某个被拖拽的子View。我我人太好这而是难理解,意味着着着子View在布局中的位置是其所在的ViewGroup决定的。

比如将View的Touch事件交给GestureDetector处理

GestureDetector:

tmpr.set(l - scrollX, t - scrollY, r - scrollX, b - scrollY);

p.invalidateChild(this, tmpr);

第三点:scrollTo( )和scrollBy( )最好的办法的坐标说明