View的自动移动,我们可以设置动画,如之类提到的 ViewCompat,Animation。

如何是View随着手指的移动而移动呢?

在onTouch事件实现

@Override
public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            break;
        case MotionEvent.ACTION_MOVE:
            moveView(view, event.getRawX(), event.getRawY());
            break;
        case MotionEvent.ACTION_UP:
            break;
    }
    return true;
}

说明:

onTouch(View view,MotionEvent event)这个方法中,

getRawX()和getRawY()获得的是相对屏幕的位置,

getX()和getY()获得的永远是view的触摸位置坐标(这两个值不会超过view的长度和宽度)。

如是Activity中的 onTouchEvent(MotionEvent event) 方法,这个时候获得的是屏幕点击位置的坐标。getRawX()与getX()访求获取的值是一样的。

方法1:setLayoutParams

/**

* 设置View的布局属性,使得view随着手指移动 注意:view所在的布局必须使用RelativeLayout 而且不得设置居中等样式

*/

private void moveView(View view, float rawX, float rawY) {
    RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view
            .getLayoutParams();
    params.leftMargin = (int) rawX - ivMove.getWidth() / 2;
    params.topMargin = (int) rawY - topTitleHeight - ivMove.getHeight() / 2;
    view.setLayoutParams(params);
}

方法2:view.layout(l,t,r,b)

/**
 * 通过layout方法,移动view 
 * 优点:对view所在的布局,要求不苛刻,不要是RelativeLayout,而且可以修改view的大小
 */
private void moveViewByLayout(View view, int rawX, int rawY) {
    int left = rawX - ivMove.getWidth() / 2;
    int top = rawY - topTitleHeight - ivMove.getHeight() / 2;
    int width = left + view.getWidth();
    int height = top + view.getHeight();
    view.layout(left, top, width, height);
}

方法3:ScrollBy()或者ScrollTo();

/**

* 在activity中实现
 * scrollBy() 相对于当前的坐标进行偏移
 * scrollTo() 相对于屏幕的左上角进行偏移
 * @param event
 */
@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:
            currentX= (int) event.getX();
            currentY= (int) event.getY();
            break;
        case MotionEvent.ACTION_MOVE:
            int x2= (int) event.getX();
            int y2= (int) event.getY();
            container.scrollBy(currentX - x2, currentY - y2);
            currentY=y2;
            currentX=x2;
            xyValue.setText(x2+","+y2);
            break;
        case MotionEvent.ACTION_UP:
            break;
    }
    return true;
}

Android:View随手指移动的更多相关文章

  1. Android 拖动View View跟随手指一动

    /** * 拖动View 配合onTouchListener使用 * 设置View的布局属性,使得view随着手指移动 注意:view所在的布局必须使用RelativeLayout 而且不得设置居中等 ...

  2. Android View视图系统分析和Scroller和OverScroller分析

    Android  View视图系统分析和Scroller和OverScroller分析 View  视图分析         首先,我们知道.在Android中全部的视图资源(无论是Layout还是V ...

  3. android view事件分发机制

    首先我们先写个简单的例子来测试View的事件转发的流程~ 1.案例 为了更好的研究View的事件转发,我们自定以一个MyButton继承Button,然后把跟事件传播有关的方法进行复写,然后添加上日志 ...

  4. Android View的滑动

    Android View的滑动 文章目录 Android View的滑动 一.实现移动 1.1 layout() 1.2 设置位置偏移量 1.3 改变布局参数 1.4 动画 1.5 ScrollTo以 ...

  5. Android View 的事件分发原理解析

    作为一名 Android 开发者,每天接触最多的就是 View 了.Android View 虽然不是四大组件,但其并不比四大组件的地位低.而 View 的核心知识点事件分发机制则是不少刚入门同学的拦 ...

  6. Android View的事件分发机制

    准备了一阵子,一直想写一篇事件分发的文章总结一下.这个知识点实在是太重要了. 一个应用的布局是丰富的,有TextView,ImageView,Button等.这些子View的外层还有ViewGroup ...

  7. 谈谈我对Android View事件分发的理解

    写这篇博客的缘由.近期因为项目中用到相似一个LinearLayout中水平布局中,有一个TextView和Button,然后对该LinearLayout布局设置点击事件.点击TextView能够触发该 ...

  8. Android开发——跟随手指的小球实现

      今天要实现的是一个跟随手指的小球,说白了就是让小球按着手指滑动的轨迹运动,实现起来还是比较容易的. 用到的类是drawView,我们先自定义一个DrawView组件. DrawView.java: ...

  9. 结合源码,重温 Android View 的事件处理知多少 ?

    前言 Android View 的 事件处理在我们的编程中,可谓是无处不在了.但对于大多数人而言,一直都是简单的使用,对其原理缺乏深入地认识. 学 Android 有一段时间了,最近发现,很多基础知识 ...

随机推荐

  1. web报表工具FineReport常用函数的用法总结(报表函数)

    说明:本次总结中,凡是以tableName或viewName作为参数因子的.函数在调用的时候均按照先从私有数据源中查找,然后再从公有数据源中查找的顺序. CLASS CLASS(object):返回o ...

  2. Windows Azure虚拟机和云服务实例计费方式更新

    在之前的Windows Azure计费账单中,A0,A1,A2,A3,A4系列的虚拟机(云服务实例)都是以A1为基准计费单位的,即: 虚拟机大小 计费单位(小时) A0 A1*0.25 A1 A1*1 ...

  3. LinuxAsm#Chapter10

    Dividing and Conquering Book: Assembly Language step by step Complexity kills programs. Remember to ...

  4. c++学习之容器细枝末节(1)

    对照着c++primier 开始学习第九章容器,把课后习题当做练习,虽然是看过书上的讲解,但是做题编程的时候,一些需要注意的地方还是难免有遗漏. 一下是几点印象比较深刻的总结: (1)前几章只学了ve ...

  5. Oracle的Numer类型与C,C#数据类型对应关系

    最近一直在编和Oracle数据库相关程序.Oracle的Number类型和C语言,C#语言类型的对应关系,在网络上查找很久,也没有找到说明文字.但在http://oracle.chinaitlab.c ...

  6. 【Unity】矩阵运算

    http://www.cnblogs.com/wywnet/p/3585075.html Vector3:  Unity3D中Vector3类定义(只写有用的):  属性:  x,y,z       ...

  7. 怎样关闭WIN7系统的自动更新

    百度经验 > 游戏/数码 > 电脑 > 电脑软件 怎样关闭WIN7系统的自动更新 听语音 | 浏览:108460 | 更新:2012-07-24 18:03 | 标签:win7 1 ...

  8. android 下载文件

    import com.example.android.R; import android.app.Activity;import android.os.Bundle;import android.os ...

  9. css3结构性伪类选择器

  10. linux系统root密码遗忘的情况下的解决办法

    机房一台centos系统的服务器,由于这台服务器的系统装了好长时间,且root密码中间更新过几次,后面去机房现场维护时,登陆密码遗忘了,悲催啊~ 没办法,只能开机进入“单用户模式”进行密码重置了. 下 ...