android开发分享Android进阶 笔记6

View的事件体系(一)《Android开发与探索》目录View的事件体系(一)一、View的基础知识1、什么是View2、View的位置参数3、MotionEvent4、TouchSlop5、VelocityTracker速度追踪6、GestureDetector二、View的滑动1、scrollTo和scrollBy2、动画3、改变布局参数一、View的基础知识1、什么是Viewview是Android中所有控件的基类,view本身可以是单个控件也可以是多个控件组成的一组控件,通过这种关系也


View的事件体系(一)

《Android开发与探索》

目录

    • View的事件体系(一)
  • 一、View的基础知识
    • 1、什么是View
    • 2、View的位置参数
    • 3、MotionEvent
    • 4、TouchSlop
    • 5、VelocityTracker速度追踪
    • 6、GestureDetector
  • 二、View的滑动
    • 1、scrollTo和scrollBy
    • 2、动画
    • 3、改变布局参数

一、View的基础知识

1、什么是View

view是Android中所有控件的基类,view本身可以是单个控件也可以是多个控件组成的一组控件,通过这种关系也就形成了View树的结构。
这和web前端中的DOM树的概念是相似的。

2、View的位置参数

1)最基本的坐标系:
Android进阶 笔记6
View的宽高和坐标的关系:

width = getRight() – getLeft();
height = getBottom() – getTop();

2)View在平移过程中,top和left表示的是原始左上角的位置信息,其值不会改变,发生改变的是x、y、translationX、translationY这四个参数。

translationX 和 translationY是左上角相对于父容器的偏移量,默认为0

x=left+translationX
y=top+translationY

3、MotionEvent

典型的事件类型:
ACTION_DOWN—-手指刚接触屏幕
ACTION_MOVE—–手指在屏幕上移动
ACTION_UP———-手指从屏幕上松开的一瞬间

4、TouchSlop

TouchSlop是系统所能识别出的被认为是滑动的最小距离,这是一个常量,设备不同,值不同。

意义:

处理滑动的时候,可以此常量去做一些过滤,比如滑动距离<常量值,就认为不是滑动。

获取:

ViewConfiguration.get(getContext()).getScaledTouchSlop();

定义:

在res/values/config.xml中
< dimen name=“config_viewConfigurationTouchSlop” >8dp< /dimen >

5、VelocityTracker速度追踪

追踪手指在滑动过程中的速度

怎么用?

首先,在View的onTouchEvent方法中追踪速度
VeloctiyTracker velocityTracker = VelocityTracker.obtain();
velocityTracker.addMovement(event);
接着,如果想要获取速度的话,
velocityTracker.computeCurrentVelocity(1000);
int xVelocity = (int) velocityTracker.getXVelocity();
int yVelocity = (int) velocityTracker.getYVelocity();
最后,不需要的时候关闭它
velocityTracker.clear();
velocityTracker.recycle();

速度 = (终点位置 – 起点位置) / 时间段
单位是ms
手指逆着坐标系的正方向滑动,产生的速度就是负值

经过测试一般建议类似ViewPager这样的空间,将时间间隔设置为1000(也就是1秒)时,加速度阈值设为1000-2000左右体验较好,各位可自行测试。

6、GestureDetector

手势检测,用于辅助检测用户的单机、滑动、长按、双击行为。
p127


二、View的滑动

主要有三种
1)通过View本身提供的scrollTo/scrollBy方法来实现滑动;【适合对view内容的滑动】
2)通过动画让一个View进行平移,主要操作translationX和translationY属性;【适合没有交互的View】
3)通过LayoutParams改变布局参数【适用于有交互的View】

1、scrollTo和scrollBy

scrollTo实现了基于参数的绝对滑动public void scrollTo(int x, int y);
scrollBy实现了基于参数的相对滑动,它是基于scrollTo的
public void scrollBy(int x, iny y){ scrollTo(mScrollX+x, mScrollY+y);}

scrollTo和scrollBy只改变View内容的位置,而不改变View在布局中的位置,view本身的getX,getY方法得到的值是不会变的

mScrollX和mScrollY变化的规律如下:P131
Android进阶 笔记6

2、动画

注意View动画的View移动只是位置移动,其本身还是在原来位置,新的位置只是View的影像而已,会导致一些bug。

使用属性动画可以解决上述问题。

3、改变布局参数

重写设置LayoutParams里面的参数
如:直接把marginLeft增加100dp
又如:在button左边写一个宽度为0的view,要改变button位置的时候就把View的宽度设置为100dp,这样button就自动往右边挤了。

怎么获取和改变?

MarginLayoutParams params = (MarginLayoutParams) mButton1.getLayoutParams(); params.width += 100; params.leftMargin += 100; mButton1.requestLayout(); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/891615.html

(0)
上一篇 2021年10月19日
下一篇 2021年10月19日

精彩推荐