控件的拖动,使用到一个监听事件

setOnTouchListener:XML代码:
 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:app="http://schemas.android.com/apk/res-auto"
 5     xmlns:tools="http://schemas.android.com/tools"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     tools:context=".MainActivity">
 9
10     <ImageView
11         android:id="@+id/textview"
12         android:src="@drawable/ic_launcher_foreground"
13         android:layout_width="wrap_content"
14         android:layout_height="wrap_content"
15         android:background="@color/colorPrimaryDark"
16         android:text="www.baidu.com"/>
17
18 </LinearLayout>

JAVA代码

 1 package com.example.a11658.textviewdrag;
 2
 3 import android.annotation.SuppressLint;
 4 import android.os.Bundle;
 5 import android.support.v7.app.AppCompatActivity;
 6 import android.view.MotionEvent;
 7 import android.view.View;
 8 import android.widget.ImageView;
 9
10 public class MainActivity extends AppCompatActivity {
11     private ImageView tv;
12     private int x;
13     private int y;
14
15     @SuppressLint("ClickableViewAccessibility")
16     @Override
17     protected void onCreate(Bundle savedInstanceState) {
18         super.onCreate(savedInstanceState);
19         setContentView(R.layout.activity_main);
20
21         tv = findViewById(R.id.textview);
22         tv.setOnTouchListener(new View.OnTouchListener() {
23             @Override
24             public boolean onTouch(View v, MotionEvent event) {
25                 switch (event.getAction()) {
26                     case MotionEvent.ACTION_DOWN:
27                         //手指按下
28                         //获取第一次接触屏幕
29                         x = (int) event.getRawX();
30                         y = (int) event.getRawY();
31                         break;
32                     case MotionEvent.ACTION_MOVE:
33                         //手指拖动
34                         //获取距离差
35                         int dx = (int) event.getRawX() - x;
36                         int dy = (int) event.getRawY() - y;
37                         //更改Imageview在窗体的位置
38                         v.layout(v.getLeft() + dx, v.getTop() + dy,
39                                 v.getRight() + dx, v.getBottom() + dy);
40                         //获取移动后的位置
41                         x = (int) event.getRawX();
42                         y = (int) event.getRawY();
43                         break;
44                     case MotionEvent.ACTION_UP:
45                         //手指弹起
46                         x = (int) event.getRawX();
47                         y = (int) event.getRawY();
48                         break;
49                 }
50                 return true;
51             }
52         });
53     }
54 }

view.layout(left, top, right, bottom)实现拖动。

1.按下图搞懂几个坐标

视图宽度 view.getWidth();

视图高度 view.getHeight() 

橘色线:view.getLeft()

蓝色线:view.getRight()

红色线:view.getTop()

粉色线:view.getBottom()

上下左右的偏移都是相对于(0.0)来说

这是Demo地址:https://pan.baidu.com/s/1LBEFP2zA0txQnNSJKxxbFw

转载于:https://www.cnblogs.com/MrChen-/p/10304188.html

Android 简单实现控件的拖动相关推荐

  1. Android 自定义组合控件小结

    Android 自定义组合控件小结 引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控 ...

  2. 004 Android之其他控件

    文章目录 ListView ListView常用属性 ListView基本使用 ListView动态插入数据 ListView实现图文混排 Adapter Adapter(适配器种类) 自定义Adap ...

  3. android 动态修改控件的宽高

    今天,简单讲讲android如何动态设置控件的宽高. 这个其实也比较简单,但是之前做的时候出现了问题,代码里设置的宽高是dx,需要先转成dp.下面以RelativeLayout作为例子,简单记录一下. ...

  4. android 画布裁剪,一种基于Android系统对UI控件进行轮廓剪裁及美化的方法与流程...

    本发明涉及Android应用的技术领域,特别涉及一种基于Android系统对UI控件进行轮廓剪裁及美化的方法. 背景技术: 目前,随着智能电视的普及,Android应用层出不穷,而那些表现形式单一.传 ...

  5. Android中ExpandableListView控件基本使用

    本文採用一个Demo来展示Android中ExpandableListView控件的使用,如怎样在组/子ListView中绑定数据源.直接上代码例如以下: 程序结构图: layout文件夹下的 mai ...

  6. android通过代码设置铃声_第六十四回:Android中UI控件之SeekBar

    各位看官们,大家好,上一回中咱们说的是Android中UI控件之ProgressBar的例子,这一回咱们的例子是UI控件之SeekBar.闲话休提,言归正转.让我们一起Talk Android吧! 看 ...

  7. android md 控件,Android基本UI控件.md

    # Android基本UI控件 ## *TextView 文本框* ### TextView常用用法 | 主要方法 | 功能描述 | | :----------: | :--------------- ...

  8. android按钮控件常见问题,Android的基本控件和Activity的应用总结

    Android的基本控件 常用界面控件 TextView 显示文本信息 button 普通按钮 EditText 可编辑的文本框组件(输入框) ImageView 用于显示图片 ImageBUtton ...

  9. android 自定义view控件,Android 自定义View——自定义View控件

    Android给我们提供了大量的View控件,但这还是远远满足不了我们的要求,有时候开发所需要的控件形式是在Android提供的控件中是不存在,这就需要我们自己去定义一个.那么如何自定义控件? 学习自 ...

最新文章

  1. 收藏 | 应对程序员面试,你必须知道的8大数据结构
  2. [JZOJ P1311] [DP]邮局设置问题
  3. RPC创建API 模块
  4. sql 视图嵌套视图_SQL视图
  5. 7.Reverse Integer (INT; Overflow)
  6. easyui控件事件监听委托给jquery事件监听,keyup取最新值问题
  7. python编程(pyqt5的使用)
  8. c语言 static变量和函数
  9. 安装mysql查看随机密码命令_centos7/8 yum安装mysql8并查看默认root密码
  10. netty源码阅读之编码之flush刷新buffer队列
  11. Servlet 三大作用域
  12. linux设置字符编码gbk,CentOS修改默认字符编码为GBK
  13. 程序人生|毕业一年有感
  14. 第四百九十一章 战利品
  15. Oracle11g在虚拟机win7上的详细安装过程(包括win7在虚拟机上的安装)
  16. python获取鼠标的当前坐标
  17. Mac删除多余的输入输出设备,删除EasyConnectAudio
  18. 探究KVO的底层实现原理
  19. Mac上doc 转docx
  20. c++重写卷积网络的前向计算过程,完美复现theano的测试结果

热门文章

  1. adaboost java_Adaboost的java实现 | 学步园
  2. python实践项目(七)
  3. C++中内存分配方式、空指针及野指针的区别
  4. 一文彻底搞懂App的Monkey稳定性测试
  5. php工程师用的到高等数学吗,学习Python解决高等数学问题
  6. 井字棋小游戏c语言简单编码,C语言实现井字棋小游戏
  7. 云服务器查看服务端口,云服务器如何查看端口是否连通
  8. java方法不写访问权限_【JAVA小白】 问关于访问权限的问题,写接口遇到错误
  9. java怎么录入4位会员号_[Java源码]键盘输入会员卡号,对其格式、位数进行判断,不符合规则会跳转重新输入 | 学步园...
  10. vue获取url中ip_Kubernetes 集群中这样获取客户端真实 IP