实现滑动的七种方法

原创 2015年11月17日 18:08:14

周末,android群英传与Android开发艺术探索两本书到了,确实是适合android进阶的好书, 以后书中学到的觉得不错的内容会写在这个模块。

今天介绍滑动的七种方式
基本思想:
当手指按下时,记下当前坐标 lastX, lastY
当手指移动时,记下 当前坐标 currentX, currentY
计算差值 offsetX = currentX - lastX, offsetY = currentY - lastY

android群英传中介绍了七种方式,看下面的例子。

1.定义出自己的控件,在MainActivity中直接引用

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/image1"
tools:context=".MainActivity">

    <mytest.jiang.wei.myapplication.DragView
android:background="@android:color/holo_red_dark"
android:layout_width="100dp"
android:layout_height="100dp" />

</RelativeLayout>
  1. 下面是我们在onTouchEvent事件中计算偏移量并处理滑动
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int) event.getX();
int y = (int) event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
lastX = x;
lastY = y;
break;

case MotionEvent.ACTION_MOVE:
//计算差值
int offsetX = x - lastX;
int offsetY = y - lastY;



break;
    }
return true;
}

在MotionEvent.ACTION_MOVE case块中处理滑动
1.使用layout方法
layout(getLeft() + offsetX, getTop() + offsetY, getRight() + offsetX, getBottom() + offsetY);

  1. offsetLeftAndRight与offsetTopAndBottom
  offsetLeftAndRight(offsetX);
  offsetTopAndBottom(offsetY);
  1. LayoutParams
    ViewGroup.MarginLayoutParams layoutParams = (ViewGroup.MarginLayoutParams) getLayoutParams();
    layoutParams.leftMargin = getLeft() + offsetX;
    layoutParams.topMargin = getTop() + offsetY;
    setLayoutParams(layoutParams);

/** 前三种方式实际都是改变子控件的布局参数, 最始调用父控件的onLayout方法重新为子控件布局*******/

4.scrollTo 与scrollBy
这里要注意,
1.scrollTo与scrollBy移动的控制的子元素,我们要移动当前view,就要调用父控件的方法。
2. 实际上是移动父控件,所以 要让偏移量取反才能看到移动 子控件的效果

((View)getParent()).scrollBy(-offsetX, -offsetY);
  1. 使用Scroller
    Scroller类是sdk为我们提供 的模拟滑动的工具类,我们可以利用他实现平滑移动的效果
    1. 在构造方法中实例化一个Scroller
    mScroller = new Scroller(context);
    2. 重写computeScroll方法,实现模拟滑动
@Override
public void computeScroll() {
// 判断是否完成滑动, 已完成则会返回false
if (mScroller.computeScrollOffset()) {
        ((View)getParent()).scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
        invalidate();
    }
}
    3.在MotionEvent.ACTION_UP case块中开启模拟滑动
case MotionEvent.ACTION_UP:
    //这里因为每次滑动的都是父控件, 开始滑动位置为0, 所开始 位置 是 0+parent.getScrollX() , 0+parent.getScrollY(),  偏移量为负 滑动的值 回到原点
mScroller.startScroll(parent.getScrollX(), parent.getScrollY(), -parent.getScrollX(), -parent.getScrollY());
    invalidate();
break;

6.使用动画
使用动画可以更新轻松的实现让控件回到原位置的平移效果

/**
 * 6.使用动画
 */
ObjectAnimator animX = ObjectAnimator//
        .ofFloat(this, "translationX", parent.getScrollX());
ObjectAnimator animY = ObjectAnimator//
        .ofFloat(this, "translationY", parent.getScrollY());
AnimatorSet animSet = new AnimatorSet();
animSet.playTogether(animX, animY);
animSet.start();
  1. 使用ViewDragHelper,
    support-v4库中提供专门处理滑动的工具类,后边会专门介绍。
版权声明:本文为博主原创文章,未经博主允许不得转载。

实现View滑动的七种方法

实现View滑动的七种方法
  • a910626
  • a910626
  • 2016年06月01日 09:33
  • 637

Android实现滑动的七种方法

Android群英传第五章 实现滑动的七种方法简要笔记
  • afei__
  • afei__
  • 2016年07月27日 16:26
  • 1011

七种排序的实现

1. 冒泡排序 2. 选择排序 3. 快速排序 4. 归并排序 5. 插入排序 6. 希尔排序 7. 堆排序...
  • ggmfengyangdi
  • ggmfengyangdi
  • 2016年07月20日 21:52
  • 609

Android Scroll分析 (二) 教你使用七种方法实现滑动

实现滑动的基本思想是:当触摸View时,系统记下当前触摸点坐标;当手指移动时,系统记下移动后的触摸点坐标,从而获取到相对于前一次坐标点的偏移量,并通过偏移量来修改View的坐标,这样不断重复,从而实现...
  • fang323619
  • fang323619
  • 2016年05月26日 22:09
  • 6127

Android 实现滑动的七种方法

1.1  用Layout方法    我们知道,当view在绘制时会调用onlayout方法来设置显示位置。同样也可以通过view的left、top, right,buttom 四个属性来控制view...
  • qq_28273051
  • qq_28273051
  • 2017年07月10日 15:31
  • 104

Android实现滑动的七种方法实践

在讲解滑动之前,要先熟悉一下安卓的坐标系。安卓视图有两个坐标系,一个是Android坐标系,一个是视图坐标系。前者以屏幕的最左上角为原点,向右为X轴正方向,向下为Y轴正方向。后者以父视图的左上角为原点...
  • diaotai
  • diaotai
  • 2016年08月16日 09:31
  • 4342

实现滑动的七种方法(Android群英传)

内容是博主照着书敲出来的,博主码字挺辛苦的,转载请注明出处,后序内容陆续会码出。  当了解了Android坐标系和触控事件后,我们再来看看如何使用系统提供的API来实现动态地修改一个View的坐标,即...
  • a120705230
  • a120705230
  • 2016年08月01日 00:58
  • 1033

Android中实现滑动的七种方法

在Android中想要实现实现滑动有很多方法,这篇博客将提供一些实现滑动的思路,希望可以帮助到有需要的人。 一、Android坐标体系 在讲解滑动之前,我们有必要简单提一下Android的坐标体系...
  • bingjianIT
  • bingjianIT
  • 2017年02月02日 12:51
  • 720

Android 实现 View 滑动的七种方法

记录下系统提供的 View 滑动的 API 方法。不管采用哪一种方式,本质的思想基本上都是一致的,当触摸 View 的时候,记录下当前触摸点的坐标,当手指移动的时候,记录移动后的触摸点坐标,从而获取相...
  • yeziliuyang
  • yeziliuyang
  • 2017年11月07日 22:38
  • 72

View滑动的七种方法

最近总是感觉自己力不从心,好多都不会啊,都不会,所以想从基础学起一些东西,总结一下自定义view滑动的方式。这里以可以随手指滑动的textview 为例子: 上效果图:直接上源码: 第一种方式:p...
  • u011625768
  • u011625768
  • 2015年12月16日 17:38
  • 293
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:实现滑动的七种方法
举报原因:
原因补充:

(最多只允许输入30个字)