Android 实现可拖动的ImageView

Android 实现可拖动的ImageView


代码实现:

public class DraggableImageView extends AppCompatImageView {private float lastTouchX;private float lastTouchY;public DraggableImageView(Context context) {super(context);init();}public DraggableImageView(Context context, AttributeSet attrs) {super(context, attrs);init();}public DraggableImageView(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);init();}private void init() {setClickable(true);}@Overridepublic boolean onTouchEvent(MotionEvent event) {final int action = event.getActionMasked();switch (action) {case MotionEvent.ACTION_DOWN:lastTouchX = event.getRawX();lastTouchY = event.getRawY();break;case MotionEvent.ACTION_MOVE:float x = event.getRawX();float y = event.getRawY();x = Math.max(0,x);y = Math.max(0,y);float dx = x - lastTouchX;float dy = y - lastTouchY;//边界控制ViewGroup pa = (ViewGroup) getParent();float lx = Math.max(0,dx+getX());float ly = Math.max(0,dy+getY());lx = Math.min(lx,pa.getWidth()-getWidth());ly = Math.min(ly,pa.getHeight()-getHeight());setX(lx);setY(ly);lastTouchX = x;lastTouchY = y;break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:break;case MotionEvent.ACTION_POINTER_UP:lastTouchX = event.getRawX();lastTouchY = event.getRawX();break;}return true;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/84513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信小程序中wxs

一、先新建wxs文件subutil.wxs 1、写过滤器 //return class var isClass function(val) {if (val 0) {return grid-item} else if (val 1) {return temperature-error-slot} else if (val 2) {return chargingCycles-error-slot} else {return unrecognized-slot} } 2、…

Nginx攻略

🤖 作者简介:水煮白菜王,一位前端劝退师 👻 👀 文章专栏: 前端专栏 ,记录一下平时在博客写作中,总结出的一些开发技巧和知识归纳总结✍。 感谢支持💕💕&#…

常见系统设计

秒杀系统 前端层: 静态资源缓存:通过CDN缓存商品图片、页面静态HTML,减少回源请求。 请求合并:合并用户频繁刷新的请求(如10秒内仅允许一次真实请求)。 端侧限流:通过JS或APP端限制用户高频点击…

git撤回commit

最常见的几种撤回方式: 目标使用命令是否保留修改撤回最后一次 commit,但保留代码修改git reset --soft HEAD~1✅ 保留撤回最后一次 commit,并丢弃修改git reset --hard HEAD~1❌ 丢弃撤回某个 commit,但保留后续提交git revert …

docker 安装运行mysql8.4.4

先前一直使用mysql5.7,最新公司新项目,无意翻阅看下5.x版本mysql官方已经不再支持,于是准备选用MySQL8,官方8.4版本是个长期支持版本,选则最新版本8.4.4,如下是MySQL官方对版本支持计划 MySQL版本下载查看地…

[java八股文][MySQL面试篇]索引

索引是什么?有什么好处? 索引类似于书籍的目录,可以减少扫描的数据量,提高查询效率。 如果查询的时候,没有用到索引就会全表扫描,这时候查询的时间复杂度是On如果用到了索引,那么查询的时候&a…

低代码平台的版本管理深度解析

引言 在当今快速发展的软件开发领域,低代码平台凭借其可视化界面和拖拽功能,极大地减少了手动编码的工作量,显著提高了开发效率和质量。它提供了丰富的预构建模块、组件和服务,让开发者能够根据业务需求和逻辑进行组合与配置&…

Springboot项目由JDK8升级至JDK17全过程教程【文末附源码】

1. 前言 最近一直想把我的开源项目maple-boot升级到jdk17版本,然后接入Spring AI。拖延症犯了一直拖拖拖,最近时间空闲较多,开始陆续着手升级。 整个升级过程 计划分为3步。 step1:先将项目升级到jdk17,使用正常ste…

同步与异步:软件工程中的时空艺术与实践智慧-以蜻蜓hr人才系统举例-优雅草卓伊凡

同步与异步:软件工程中的时空艺术与实践智慧-以蜻蜓hr人才系统举例-优雅草卓伊凡 概念解析:时空维度的编程范式 在软件开发的宇宙中,同步(Synchronous)与异步(Asynchronous)是两种根本不同的执行模式,它们塑造了程序与时间和空间…

TF-IDF算法的代码实践应用——关键词提取、文本分类、信息检索

回顾:TF-IDF算法详解与实践总结 上一篇文章我们深入剖析了TF-IDF的原理与细节,但实践才是检验真理的唯一标准!今天,我们将从“纸上谈兵”转向“实战演练”:通过纯Python手写实现与调用sklearn工具包两种方式&#xff0…

前端面试宝典---事件循环面试题

浏览器进程模型与 JavaScript 执行机制 现代浏览器采用多进程架构,包含浏览器进程、渲染进程、网络进程等多个核心进程。每个标签页会独立创建一个渲染进程,负责页面内容的解析、渲染和执行脚本代码。 JavaScript 的单线程特性 JavaScript 采用单线程…

postman调用接口报错401, Unauthorized, Invalid Token. null解决办法

1、先登录系统,F12找到token并复制 2、postman里选中Authorization,下拉选中选择Bearer Token,把复制好的token黏贴到右侧输入框,如下所示: 3、如果是json格式的参数拷贝到Body中,如下所示: 4、 接口调用成功

C++----剖析list

前面学习了vector和string,接下来剖析stl中的list,在数据库中学习过,list逻辑上是连续的,但是存储中是分散的,这是与vector这种数组类型不同的地方。所以list中的元素设置为一个结构体,将list设计成双向的&…

为什么已经有 Nginx 了,还需要服务网关?

在当前微服务架构中,虽然 Nginx 是一个高性能的反向代理和负载均衡服务器,但在实际使用中仍然存在诸多局限性。为了满足运维效率、功能统一治理以及与微服务生态集成的需求,通常会在 Nginx 和业务服务之间引入一层基于 Java 实现的服务网关&a…

Kendo UI 中,ViewModel、DataSource 和 Grid的关系。Kendo 框架发起 HTTP 请求

Kendo UI 中,ViewModel、DataSource 和 Grid的关系 在 Kendo UI 中,ViewModel、DataSource 和 Grid 是构建动态数据应用的核心组件,三者协同工作实现数据的绑定、管理和展示。 一、三者关系图解 #mermaid-svg-3lWxu2zWB23wDYEz {font-family…

宇树开源 Qmini 双足机器人,可通过 3D 打印动手制作,使用树莓派作为主控制器

Unitree Qmini 是一款由宇树科技设计并开源的低成本双足机器人,开发者可以完全通过 3D 打印进行复刻。Qmini 专为业余爱好者、教育工作者和研究人员设计,使用户能够快速上手,并以类似乐高的模块化方式组装自己的机器人。该项目为机器人技术提…

解决华为云服务器无法ping通github问题

在push代码到github上的时候,发现显示22端口无法连接,在已经开放了端口,防火墙关闭的情况下仍然无法连接到GitHub。 发现是服务器和github断连,选择 sudo vim /etc/hosts 添加一下代码 # GitHub Start140.82.121.4 gith…

关于electron-vite koffi 读取 dll 打包等问题得记录

koffi const koffi require(‘koffi’) import iconv from ‘iconv-lite’;const libPath path.resolve(__dirname, ‘…/…/resources/dll/sss.dll’) const yktLib koffi.load(libPath) const ret yktLib.func(‘string sss(string Url, string Data, string OutData)’…

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…

通过关键字批量抓取淘宝商品数据实现方法途径分享--API

item_search 按关键字搜索淘宝商品item_search_tmall 按关键字搜索天猫商品item_search_pro 高级关键字搜索淘宝商品item_search_img 按图搜索淘宝商品(拍立淘)item_search_shop 获得店铺的所有商品 一、引言 在电商领域,获取淘宝商品数据对…