安卓触摸事件——手指缩放米老鼠

2023-12-19 13:10

本文主要是介绍安卓触摸事件——手指缩放米老鼠,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

啦啦啦啦,我来啦!手指缩放米老鼠给各位客官奉上
好可惜不能放文件夹,不然直接把素材都可以给你们啦,我使用的是模拟机,没使用真机,缩放的时候直接可以按住Ctrl键同时拖动鼠标就可以啦

xml代码

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/root"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:background="@mipmap/background"android:orientation="vertical"><ImageViewandroid:id="@+id/iv_mickey"android:layout_width="100dp"android:layout_height="120dp"android:scaleType="fitXY"android:src="@mipmap/mickey" /></LinearLayout>

Java代码

package net.hw.a0502_scalemickeybytouches;import android.app.Activity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.LinearLayout;public class MainActivity extends Activity {/*** 米老鼠图像控件*/private ImageView ivMickey;/*** 线性根布局*/private LinearLayout root;/*** 布局参数*/private LinearLayout.LayoutParams layoutParams;/*** 第一个触点的坐标*/float x1, y1;/*** 第二个触点的坐标*/float x2, y2;/*** 第一个触点下一次的坐标*/float next_x1, next_y1;/*** 第二个触点下一次的坐标*/float next_x2, next_y2;/*** 两个触点之间的距离*/float distance;/*** 两个触点下一次的距离*/float next_distance;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);// 利用布局资源文件设置用户界面setContentView(R.layout.activity_main);// 通过资源索引获得控件实例ivMickey = (ImageView) findViewById(R.id.iv_mickey);root = (LinearLayout) findViewById(R.id.root);// 设置根布局可以获得焦点root.setFocusable(true);// 让根布局获得焦点root.requestFocus();// 获取图像控件的布局参数layoutParams = (LinearLayout.LayoutParams) ivMickey.getLayoutParams();// 给根布局注册触摸监听器root.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View v, MotionEvent event) {// 根据触点个数执行不同操作(两个触点缩放图像,单个触点移动图像)if (event.getPointerCount() == 2) { // 两个触点// 根据触摸动作执行不同的操作switch (event.getAction()) {case MotionEvent.ACTION_DOWN: // 触点按下// 获取第一个触点的坐标x1 = event.getX(0);y1 = event.getY(0);// 获取第二个触点的坐标x2 = event.getX(1);y2 = event.getY(1);// 两个触点的距离distance = (float) Math.sqrt((x2 - x1)* (x2 - x1)+ (y2 - y1)* (y2 - y1));break;case MotionEvent.ACTION_MOVE: // 触点移动// 获取第一个触点下一次的坐标next_x1 = event.getX(0);next_y1 = event.getY(0);// 获取第二个触点下一次的坐标next_x2 = event.getX(1);next_y2 = event.getY(1);// 两个触点下一次的距离next_distance = (float) Math.sqrt((next_x2 - next_x1)* (next_x2 - next_x1) + (next_y2 - next_y1)* (next_y2 - next_y1));break;case MotionEvent.ACTION_UP: // 触点放开break;}// 修改图像控件的布局参数if (next_distance > distance) {layoutParams.width = (int) (layoutParams.width * 1.05);layoutParams.height = (int) (layoutParams.height * 1.05);} else {layoutParams.width = (int) (layoutParams.width * 0.95);layoutParams.height = (int) (layoutParams.height * 0.95);}// 坐标迭代x1 = next_x1;y1 = next_y1;x2 = next_x2;y2 = next_y2;// 两个触点下一次的距离distance = (float) Math.sqrt((x2 - x1)* (x2 - x1) + (y2 - y1)* (y2 - y1));} else if (event.getPointerCount() == 1) { // 单点触摸if (event.getAction() == MotionEvent.ACTION_MOVE) {// 修改图像控件的布局参数(因为线性布局gravity设置为center,所以要减去屏幕一半的尺寸)layoutParams.leftMargin = (int) event.getX() - getWindowManager().getDefaultDisplay().getWidth() / 2;layoutParams.topMargin = (int) event.getY() - getWindowManager().getDefaultDisplay().getHeight() / 2;}}// 重新设置图像控件的布局参数ivMickey.setLayoutParams(layoutParams);return true; // 设置为真,三个事件才会依次执行:DOWN->MOVE->UP}});}
}

我只能给你们看效果图,缩放的过程你们可以自己试一下
1.)原图
在这里插入图片描述

2.)放大效果图
在这里插入图片描述

3.)缩小效果图

在这里插入图片描述

这篇关于安卓触摸事件——手指缩放米老鼠的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/512292

相关文章

c/c++的opencv图像金字塔缩放实现

《c/c++的opencv图像金字塔缩放实现》本文主要介绍了c/c++的opencv图像金字塔缩放实现,通过对原始图像进行连续的下采样或上采样操作,生成一系列不同分辨率的图像,具有一定的参考价值,感兴... 目录图像金字塔简介图像下采样 (cv::pyrDown)图像上采样 (cv::pyrUp)C++ O

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Android使用ImageView.ScaleType实现图片的缩放与裁剪功能

《Android使用ImageView.ScaleType实现图片的缩放与裁剪功能》ImageView是最常用的控件之一,它用于展示各种类型的图片,为了能够根据需求调整图片的显示效果,Android提... 目录什么是 ImageView.ScaleType?FIT_XYFIT_STARTFIT_CENTE

C#如何动态创建Label,及动态label事件

《C#如何动态创建Label,及动态label事件》:本文主要介绍C#如何动态创建Label,及动态label事件,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#如何动态创建Label,及动态label事件第一点:switch中的生成我们的label事件接着,

spring @EventListener 事件与监听的示例详解

《spring@EventListener事件与监听的示例详解》本文介绍了自定义Spring事件和监听器的方法,包括如何发布事件、监听事件以及如何处理异步事件,通过示例代码和日志,展示了事件的顺序... 目录1、自定义Application Event2、自定义监听3、测试4、源代码5、其他5.1 顺序执行

Python将大量遥感数据的值缩放指定倍数的方法(推荐)

《Python将大量遥感数据的值缩放指定倍数的方法(推荐)》本文介绍基于Python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处理,并将所得处理后数据保存为新的遥感影像... 本文介绍基于python中的gdal模块,批量读取大量多波段遥感影像文件,分别对各波段数据加以数值处

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

Python中的异步:async 和 await以及操作中的事件循环、回调和异常

《Python中的异步:async和await以及操作中的事件循环、回调和异常》在现代编程中,异步操作在处理I/O密集型任务时,可以显著提高程序的性能和响应速度,Python提供了asyn... 目录引言什么是异步操作?python 中的异步编程基础async 和 await 关键字asyncio 模块理论

禁止平板,iPad长按弹出默认菜单事件

通过监控按下抬起时间差来禁止弹出事件,把以下代码写在要禁止的页面的页面加载事件里面即可     var date;document.addEventListener('touchstart', event => {date = new Date().getTime();});document.addEventListener('touchend', event => {if (new

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问