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

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

相关文章

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,导致链接无法访问

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

FreeRTOS内部机制学习03(事件组内部机制)

文章目录 事件组使用的场景事件组的核心以及Set事件API做的事情事件组的特殊之处事件组为什么不关闭中断xEventGroupSetBitsFromISR内部是怎么做的? 事件组使用的场景 学校组织秋游,组长在等待: 张三:我到了 李四:我到了 王五:我到了 组长说:好,大家都到齐了,出发! 秋游回来第二天就要提交一篇心得报告,组长在焦急等待:张三、李四、王五谁先写好就交谁的

【经验交流】修复系统事件查看器启动不能时出现的4201错误

方法1,取得『%SystemRoot%\LogFiles』文件夹和『%SystemRoot%\System32\wbem』文件夹的权限(包括这两个文件夹的所有子文件夹的权限),简单点说,就是使你当前的帐户拥有这两个文件夹以及它们的子文件夹的绝对控制权限。这是最简单的方法,不少老外说,这样一弄,倒是解决了问题。不过对我的系统,没用; 方法2,以不带网络的安全模式启动,运行命令行,输入“ne

BT天堂网站挂马事件后续:“大灰狼”远控木马分析及幕后真凶调查

9月初安全团队披露bt天堂网站挂马事件,该网站被利用IE神洞CVE-2014-6332挂马,如果用户没有打补丁或开启安全软件防护,电脑会自动下载执行大灰狼远控木马程序。 鉴于bt天堂电影下载网站访问量巨大,此次挂马事件受害者甚众,安全团队专门针对该木马进行严密监控,并对其幕后真凶进行了深入调查。 一、“大灰狼”的伪装 以下是10月30日一天内大灰狼远控的木马样本截图,可以看到该木马变种数量不

安卓玩机工具------小米工具箱扩展工具 小米机型功能拓展

小米工具箱扩展版                     小米工具箱扩展版 iO_Box_Mi_Ext是由@晨钟酱开发的一款适用于小米(MIUI)、多亲(2、2Pro)、多看(多看电纸书)的多功能工具箱。该工具所有功能均可以免root实现,使用前,请打开开发者选项中的“USB调试”  功能特点 【小米工具箱】 1:冻结MIUI全家桶,隐藏状态栏图标,修改下拉通知栏图块数量;冻结

react笔记 8-19 事件对象、获取dom元素、双向绑定

1、事件对象event 通过事件的event对象获取它的dom元素 run=(event)=>{event.target.style="background:yellowgreen" //event的父级为他本身event.target.getAttribute("aid") //这样便获取到了它的自定义属性aid}render() {return (<div><h2>{

react笔记 8-18 事件 方法 定义方法 获取/改变数据 传值

1、定义方法并绑定 class News extends React.Component {constructor(props) {super(props)this.state = {msg:'home组件'}}run(){alert("我是一个run") //方法写在类中}render() {return (<div><h2>{this.state.msg}</h2><button onCli