可拖拽的ImageButton
所有的View都可以实现onTouchListener,我们可以监听此方法去获取控件的坐标,
然后重绘控件的位置
上个图:
import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; import android.widget.ImageButton; import android.widget.Toast; public class DraftButtonActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); DisplayMetrics dm = getResources().getDisplayMetrics(); final int screenWidth = dm.widthPixels; final int screenHeight = dm.heightPixels - 50; final ImageButton btn = (ImageButton) findViewById(R.id.btn); btn.setOnTouchListener(new OnTouchListener() { int lastX, lastY; @Override public boolean onTouch(View v, MotionEvent event) { // TODO Auto-generated method stub int ea = event.getAction(); Log.i("TAG", "Touch:" + ea); switch (ea) { case MotionEvent.ACTION_DOWN: lastX = (int) event.getRawX();// 获取触摸事件触摸位置的原始X坐标 lastY = (int) event.getRawY(); break; case MotionEvent.ACTION_MOVE: int dx = (int) event.getRawX() - lastX; int dy = (int) event.getRawY() - lastY; int l = v.getLeft() + dx; int b = v.getBottom() + dy; int r = v.getRight() + dx; int t = v.getTop() + dy; // 下面判断移动是否超出屏幕 if (l < 0) { l = 0; r = l + v.getWidth(); } if (t < 0) { t = 0; b = t + v.getHeight(); } if (r > screenWidth) { r = screenWidth; l = r - v.getWidth(); } if (b > screenHeight) { b = screenHeight; t = b - v.getHeight(); } v.layout(l, t, r, b); lastX = (int) event.getRawX(); lastY = (int) event.getRawY(); Toast.makeText(DraftButtonActivity.this, "当前位置:" + l + "," + t + "," + r + "," + b, Toast.LENGTH_SHORT).show(); v.postInvalidate(); break; case MotionEvent.ACTION_UP: break; } return false; } }); } }
转载于:https://www.cnblogs.com/android-html5/archive/2011/07/26/2534125.html
可拖拽的ImageButton相关推荐
- Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮...
Android6.0 源码修改之 仿IOS添加全屏可拖拽浮窗返回按钮 前言 之前写过屏蔽系统导航栏功能的文章,具体可看Android6.0 源码修改之屏蔽导航栏虚拟按键(Home和RecentAPP) ...
- Android 可拖拽悬浮按钮
转自http://www.jianshu.com/p/ba3e5fc5cff1 实现思路 通过重写控件的onTouchEvent方法监听触摸效果. 通过View的setX()和setY()方法实现移动 ...
- Javascript 拖拽的一些高级的应用——逐行分析代码,让你轻松了解拖拽的原理...
我们看看之前的拖拽在周围有东西的时候会出现什么问题? 在高级浏览器中不会有啥问题,我们放到IE7下面测试一下,问题就出来了.如图 我们可以很清楚的看到,文字都已经被选中了.那这个用户体验很不好,用起来 ...
- vant组件实现上传图片裁剪_如何用 120 行代码,实现交互完整的拖拽上传组件?...
作者 | 前端劝退师 责编 | 伍杏玲 你将在该篇学到: 如何将现有组件改写为 React Hooks函数组件 useState.useEffect.useRef是如何替代原生命周期和Ref的. 一个 ...
- Python Qt GUI设计:QDrag拖拽数据传输类(基础篇—18)
为用户提供的拖曳功能很直观,在很多桌面应用程序中,复制或移动对象都可以通过拖曳来完成. 基于MIME类型的拖曳数据传输是基于QDrag类的.QMimeData对象将关联的数据与其对应的MIME类型相关 ...
- android列表实现置顶,Android利用RecyclerView实现全选、置顶和拖拽功能示例
Android利用RecyclerView实现全选.置顶和拖拽功能示例 发布时间:2020-08-23 16:26:42 来源:脚本之家 阅读:159 作者:爱开发 前言 今天给大家分享是如何在Rec ...
- 【Vue版】实现拖拽、排序效果(注意,这个方法在chrome谷歌浏览器上面不适用,dragend会情不自禁触发drag事件先执行,有点像浏览器的一个bug)
<divclass='dragged':index="$index"draggable='true'@dragstart="dragstart"@drag ...
- 【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件我们来点实际的(但是有个弊端:拖拽过程中鼠标会变成一个禁用符号,不太友好)
<div class='dragged'></div> //初始化需要拖拽的列initDrags() {var arr = document.querySelectorAll( ...
- 【墙裂推荐】【原生基础版】js原生实现拖拽效果,注意不要忘了div的cursor用grab和grabbing 还是古法炮制、传统工艺的原生代码兼容性最好,推荐
以下方式的劣势就是在放弃拖拽那一刻会触发click事件,通常如果被拖拽元素还有其他点击事件,会重复触发,往往并非业务需求.优势就是-额-貌似这段代码没什么屌优势! <div class='dra ...
最新文章
- Linux C编程--临时文件
- php星期和时间获取
- python opencv 摄像头截图_python opencv捕获摄像头并显示内容
- WPS 2000使用技巧点滴
- ZC公司员工评分系统——后台查询合成DataTable
- 安装Oracle XE 18c
- (48)性能测试——聚合报告
- Flutter-防京东商城项目-提交订单、去支付页面制作-44
- c++头文件iomanip.h中的setw、setprecision、setfill和setbase函数的使用
- 创业篇之七:利益法则
- Java 二进制与十六进制字符串相互转换
- IO流 输入流、输出流、字节流、字符流、转换流、及Properties类
- java 日期加减天数、月数、年数的计算方式
- anu - proptypes
- 十代服务器芯片组,【十代处理器主板芯片组个人整理汇总一览】包含总结和分析...
- RTX3090 windows cuda11.0 cudnn pytorch nightly试用版
- 【Github】fatal: remote error: You can't push to git 解决办法
- 这是一个盗版和强盗的社会
- 在这里!修练成一个值得托付的人,焦虑会顿减......
- html表格怎么拆分