【Android】图片点击放大放小

server/2024/10/23 20:45:07/

📖Android图片点击放大放小

    • ✅1.触摸缩放
    • ✅2.缩放移动中心

✅1.触摸缩放

请添加图片描述

通过触摸事件获取触摸的坐标,并将其通过动画放大缩小即可实现:
这里的holder.photo_id换成图片组件即可。

private boolean isScale=false;holder.photo_id.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent event) {ImageView imageView = holder.photo_id;float x = event.getX();float y = event.getY();float pivotX = x ;float pivotY = y;if (!isScale){// 设置缩放中心imageView.setPivotX(pivotX);imageView.setPivotY(pivotY);// 开始放大动画imageView.animate().scaleX(3.5f).scaleY(3.5f).setDuration(300).start();isScale=true;}else {// 设置缩放中心imageView.setPivotX(pivotX);imageView.setPivotY(pivotY);// 开始缩小动画imageView.animate().scaleX(1f).scaleY(1f).setDuration(300).start();isScale=false;}return false;}});

✅2.缩放移动中心

请添加图片描述

这种需求就是能触摸想看的地方,放大到中心位置,可以更直观的看清,主要改变的地方:

  • 通过withEndAction动画结束事件,进行几次偏移
  • 还原时将偏移量从0开始即可
private boolean isScale=false;holder.photo_id.setOnTouchListener(new View.OnTouchListener() {@Overridepublic boolean onTouch(View view, MotionEvent event) {ImageView imageView = holder.photo_id;float x = event.getX();float y = event.getY();float pivotX = x ;float pivotY = y;if (!isScale){// 设置缩放中心imageView.setPivotX(pivotX);imageView.setPivotY(pivotY);// 开始放大动画imageView.animate().scaleX(3.5f).scaleY(3.5f).setDuration(300).withEndAction(new Runnable() {@Overridepublic void run() {//移动偏移量计算float x1 = x - imageView.getPaddingLeft();float y1 = y - imageView.getPaddingTop();float x2 = imageView.getWidth() / 2 - x1;float y2 = imageView.getHeight() / 2 - y1;imageView.setTranslationX(x2);imageView.setTranslationY(y2);}}).start();isScale=true;}else {// 设置缩放中心imageView.setPivotX(pivotX);imageView.setPivotY(pivotY);// 开始放大动画imageView.animate().translationX(0) // 重置translationX.translationY(0) // 重置translationY.scaleX(1f).scaleY(1f).setDuration(300).start();isScale=false;}return false;}});

http://www.ppmy.cn/server/134254.html

相关文章

10.23学习日志

1.概念 Matplotlib 库:是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy ndarray 数组来绘制 2D 图像,它使用简单、代码清晰易懂 Figure:指整个图形,您可以把它理解成一张画布&…

《深度学习》OpenCV LBPH算法人脸识别 原理及案例解析

目录 一、LBPH算法 1、概念 2、实现步骤 3、方法 1)步骤1 • 缩放 • 旋转和平移 2)步骤2 二、案例实现 1、完整代码 1)图像内容: 2)运行结果: 一、LBPH算法 1、概念 在OpenCV中,L…

MySQL启动报错:InnoDB: Unable to lock ./ibdata1 error

MySQL启动报错:InnoDB: Unable to lock ./ibdata1 error 在OS X环境下MySQL启动时报错: 016-03-03T00:02:30.483037Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1 error: 35 2016-03-03T00:02:30.483100Z 0 [Note] InnoDB: Check that you do not alr…

【VUE】Vue中常用的修饰符

事件修饰符 .stop:阻止事件冒泡。.prevent:阻止默认事件。.capture:使用事件捕获模式。.self:只当事件在该元素本身(比如不是子元素)触发时触发回调。.once:只触发一次事件。 按键修饰符 .en…

cfg80211-- 修复添加EHT的capabilities能力供驱动使用

需求: 添加支持以检索信标模板中用户空间传递的EHT功能和EHT操作元素,并将指针存储在结构cfg80211_ap_settings中供驱动程序使用 在nl80211_calculate_ap_params方法种 ---------------------------- net/wireless/nl80211.c ---------------------------- index f3ad5f2.…

实现对redis过期键监听案例

开发背景 为了实现当经纪人A提交分佣后如果三天后其他经纪人没有确认分佣就自动确认分佣&#xff0c;如果经纪人A修改分佣后再次提交分佣&#xff0c;时间重置为三天 实现方式 第一步&#xff1a;引入依赖 <dependency> <groupId>redis.clients</groupId> …

【云原生网关】Higress 从部署到使用详解

目录 二、网关概述 2.1 什么是云原生网关 2.2 常见的云原生网关 2.2.1 Nginx 2.2.2 ApiSix 2.2.3 Kong 2.2.4 Apache Shenyu 2.2.5 Higress 2.2.6 Envoy​​​​​​​ 三、higress介绍 3.1 什么是higress 3.2 Higress 定位 3.3 Higress 内核选择 四、Higress搭…

QT--Qlabel学习、获取文本和设置文本、文本对齐方式、文本换行、显示图片

QLabel 是 Qt 中的标签类&#xff0c;通常用于显示提示性的文本&#xff0c;也可以显示图像 对齐方式 用于设置标签中的内容在水平和垂直两个方向上的对齐方式&#xff0c;比如左对齐、右对齐、上对齐、下对齐、水平居中、垂直居中等。 // 获取和设置文本的对齐方式 Qt::Ali…