View的滑动

一、View的位置参数(都是相对于父容器的位置)

1.View的位置由左上角点、右下角点来确定的。分别对应(左上的X—getLeft,左上的Y—getTop,右下的X—getRight,右下的Y—getBottom)。

2.View的偏移量(translation):表示左上角相对于父容器的偏移量(当前位置与移动后的位置之差叫做偏移量),默认为0。(进过测试只能通过setTranslation改变Translation,补间动画animation.xml无效)通过getTransaltion获取X,Y

3.View的getX(),getY()(都是左上角的点):X = left + translationX;就是左上角的X坐标加上X的偏移量,Y = top + translationY;(就是左上角Y的坐标,加上Y的偏移量)

4.View的getScaleX(),getScaleY():View的内容的左上角的坐标。

解释:

二、介绍VelocityTracker、GestureDetector、Scroller

1.VelocityTrancker

作用:速度追踪,用于追踪手指在滑动过程中的速度(包括水平和竖直方向速度)

使用:①、将event事件添加至Velocity对象中   ②、设置时间:指一段时间划过的像素数  ③、获取X,Y方向滑过的像素数(从左向右为正,从上向下为正)

实例:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

    private VelocityTracker mVelocityTracker = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //获取Velocity
        mVelocityTracker = VelocityTracker.obtain();
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        //将事件对象由该对象掌管
        mVelocityTracker.addMovement(event);
        switch (event.getAction()){
            case MotionEvent.ACTION_MOVE:
                //设置时间间隔:速度指的是一段时间内手指划过的像素数
                mVelocityTracker.computeCurrentVelocity(1000);
                //打印速度
                Log.d(TAG,"1秒内滑动X像素数"+mVelocityTracker.getXVelocity()+"  Y像素数"+mVelocityTracker.getYVelocity());
                break;
            default:
                break;
        }
        return super.onTouchEvent(event);
    }
}

MainActivity

注意:当调用getXVelocity()方法的时候,就会返回平均速度。(假设我设置1喵,就是说不是等一秒过后才会,返回getXVelocioty(),而是当你调用getXVelocity()利用数学计算出每秒的速度)。

时间: 2024-08-11 01:36:11

View的滑动的相关文章

android中实现view可以滑动的六种方法

在android开发中,经常会遇到一个view需要它能够支持滑动的需求.今天就来总结实现其滑动的六种方法.其实每一种方法的 思路都是一样的,即:监听手势触摸的坐标来实现view坐标的变化,从而实现view的滑动效果. 一.通过Layout方法来实现滑动 如果你将滑动后的目标位置的坐标传递给Layout,这样子就会把view的位置给重新布置了一下,在视觉上就是view的一个滑动的效果. 这就是利用Layout方法实现滑动的核心思路.我们来看一下代码: 新建项目,然后自定义一个view,代码如下:

一个Demo带你彻底掌握View的滑动冲突

最近在重新学习Android自定义View这一块的内容,遇到了平时开发中经常碰到的一个棘手问题:View的滑动冲突.相信不少小伙伴都有相同的感觉,看似简单真正做起来却又不知道从何下手.今天就从一个简单的Demo带你彻底掌握解决View滑动冲突的办法. 老规矩,先上图: 示例图中是一个常见的下拉回弹,手指向下滑动的时候,整个布局会一起滑动.下拉到一定距离的时候松手,布局会自动回弹到开始的位置:手指向上滑动的时候,布局的子View会滑动到最底部,然后手指再向下滑动,布局的子View会滑动到最顶部,最

view的滑动冲突解决方案

一.常见的滑动冲突场景 1.外部滑动方向和内部滑动方向不一致 2.外部滑动方向和内部滑动方向一致 3.上面两种情况的嵌套 二.滑动冲突处理的原则 场景1的处理原则是:当用户左右滑动时,需要让外部的view拦截点击事件,当用户上下滑动时,需要让内部的view拦截点击事件.场景2和场景3比较特殊,无法如同场景1一样原则的处理冲突,需要在业务上寻找突破点.比如业务上规定:当处于某种状态时需要外部View响应用户的滑动,而处于另一种状态时则需要内部View来响应View的滑动,根据这种业务上的需求我们也

View的滑动冲突

View的滑动冲突指的是当有内外两层View同时可以滑动的时候,这个时候就会产生滑动冲突.那么应该如何解决滑动呢,其实要用到View的事件分发机制. View的滑动冲突主要有以下三个场景: 场景一:外部滑动方向和内部滑动方向不一致: 场景二:外部滑动方向和内部滑动方向一致: 场景三:以上两种情况的嵌套. 这里主要讨论场景一的滑动冲突的解决,其他两种思想都是类似的,根据具体情况而定. 对于场景一,它的滑动冲突处理规则是:当用户左右滑动时,需要外部的View拦截点击事件,当用户上下滑动时,需要内部的

View 的滑动

View 的滑动 学习自 <Android开发艺术探索> 滑动漫谈 因为Android手机屏幕大小的原因,所以为了显式更多的信息,我们必须采用滚动的方式来处理,因为滚动就涉及到了滑动,有的滑动十分生硬,而有的滑动却是圆润并且绚丽的,View的滑动就是我们本章要学习的内容. 使用scrollTo/scrollBy 注意,这种方式只是改变了View内容的位置,并没有改变View的位置,以Button为例,那就是仅仅改变了Button中的文本的位置,而没有改变Button的位置. scrollTo

android中实现view可以滑动的六种方法续篇(一)

承接上一篇,如果你没有读过前四章方法,可以点击下面的链接: http://www.cnblogs.com/fuly550871915/p/4985053.html 下面开始讲第五中方法. 五.利用Scroller类实现滑动 (1)基础知识总结 为了便于下面的阅读代码,先来总结一下关于Scroller类的基础知识.利用Scroller类实现滑动,需要三个步骤: 步骤一: 初始化Scroller对象,即mScroller = new Scroller(context)步骤二: 重写computeSc

自定义控件(视图)2期笔记12:View的滑动冲突之 外部拦截法

1. 外部拦截法: 点击事件通过父容器拦截处理,如果父容器需要就拦截,不需要就不拦截. 2. 下面通过一个Demo示例说明: (1)首先我们创建一个Android工程,如下: (2)我们来到activity_main.xml,如下: 1 <com.himi.viewconflict.ui.RevealLayout 2 xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="htt

自定义控件(视图)2期笔记13:View的滑动冲突之 内部拦截法

1. 内部拦截法: 父容器不拦截事件,所有的事件全部都传递给子元素,如果子元素需要此事件就直接消耗掉,否则就交给父容器进行处理. 这种方法和Android中的事件分发机制不一样,需要配合requestDisallowInterceptTouchEvent方法才能正常工作,使用起来较外部拦截法稍显负责一点. 我们需要重写子元素的dispatchTouchEvent方法. 这种方法的伪代码是: 1 @Override 2 public boolean dispatchTouchEvent(Motio

12.View的滑动

1.scrollTo和ScrollBy 为了实现滑动,View提供了两个方法来让我们实现这个功能,那就是scrollTo和scrollBy方法, scrollTo的方法如下: /** * Set the scrolled position of your view. This will cause a call to * {@link #onScrollChanged(int, int, int, int)} and the view will be * invalidated. * @para