多点触控(缩放图片)

Android多点触控实现图片缩放预览 在我的博客 Android手势识别基础介绍 中介绍了 MotionEvent 的一些知识,看过的朋友或者对手势识别有了解的都应该知道一般的触摸事件也就是单点触控该如何处理,所以我的这篇博客要介绍的就是关于如何实现多点触控。 我在博客中也介绍了多点触控的知识,但是并没有用实例实践,这里就用一个例子来说明。相信大家都经常在手机上浏览图片,大家的应用上也一定可以对图片进行放大或者缩小的处理,来让用户更 阅读详情



 

 

准备一张名为picture的图片。

 

 

 

布局文件main.xml不用编写

 

 

 

 

 

 

在MyMultitouchDemo.java中:

 

package com.li.multitouch;

 

import android.app.Activity;

import android.content.Context;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.graphics.Canvas;

import android.graphics.Matrix;

import android.graphics.Paint;

import android.os.Bundle;

import android.view.MotionEvent;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.view.Window;

import android.widget.ImageView;

 

public class MyMultitouchDemo extends Activity {

  private static final int SCALEBASIC = 3 ;// 调整的比率

  private int imageX = 0 ;  // 计算图片的X轴

  private int imageY = 0 ;  // 计算图片的Y轴

  private SurfaceHolder holder = null ;

  private int screenWidth = 0 ; //屏幕宽度

  private int screenHeight = 0 ; //屏幕高度

  private int imageWidth = 0 ;  //图片宽度

  private int imageHeight = 0 ; //图片高度

  private Bitmap bitmap = null ;

  @Override

  public void onCreate(Bundle savedInstanceState) {

     super.onCreate(savedInstanceState);

     super.requestWindowFeature(Window.FEATURE_NO_TITLE) ;

     this.screenWidth = super.getWindowManager()

         .getDefaultDisplay().getWidth() ;  //获得屏幕的宽度

     this.screenHeight = super.getWindowManager()

         .getDefaultDisplay().getHeight() ; //获得屏幕的高度

     this.bitmap = BitmapFactory.decodeResource(super.getResources(),

         R.drawable.picture);

     this.imageWidth = this.bitmap.getWidth() ;  //获得图片的宽度

     this.imageHeight = this.bitmap.getHeight() ; //获得图片的高度

     this.imageX = (this.screenWidth - this.imageWidth) / 2 ;

     this.imageY = (this.screenHeight - this.imageHeight) / 2 ;

     super.setContentView(new MySurfaceView(this));

  }

 

  private class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {

    

     public MySurfaceView(Context context) {

       super(context);

       MyMultitouchDemo.this.holder = super.getHolder() ;

       MyMultitouchDemo.this.holder.addCallback(this) ;

       super.setFocusable(true) ;  // 获得焦点,进行触摸事件

     }

 

     public void surfaceChanged(SurfaceHolder holder, int format, int width,

         int height) {

      

     }

 

     public void surfaceCreated(SurfaceHolder holder) {

       MyMultitouchDemo.this.setImage(1.0f, 300, 450);

     }

 

     public void surfaceDestroyed(SurfaceHolder holder) {

      

     }

  }

 

  private void setImage(float scale, int width, int height) {  // 改变之后修改图片

     Canvas canvas = MyMultitouchDemo.this.holder.lockCanvas() ;  // 获取画布

     Paint paint = new Paint() ;

     canvas.drawRect(0, 0, MyMultitouchDemo.this.screenWidth,

         MyMultitouchDemo.this.screenHeight, paint); //画底色消除从影

     Matrix matrix = new Matrix() ;

     matrix.postScale(scale, scale) ; // 等量缩放

     Bitmap target = Bitmap.createBitmap(MyMultitouchDemo.this.bitmap, 0, 0,

         width, height, matrix, true);

     this.imageWidth = target.getWidth() ;

     this.imageHeight = target.getHeight() ;

     this.imageX = (this.screenWidth - this.imageWidth) / 2 ;

     this.imageY = (this.screenHeight - this.imageHeight) / 2 ;

     canvas.translate(this.imageX, this.imageY) ; // 平移到指定的位置

     canvas.drawBitmap(this.bitmap, matrix, paint) ;

    MyMultitouchDemo.this.holder.unlockCanvasAndPost(canvas) ;// 解锁,并提交图象

  }

 

  @Override

  public boolean onTouchEvent(MotionEvent event) {

     int pointCount = event.getPointerCount() ;

     if (pointCount == 2) {

       float pointA = event.getY(0) ;

       float pointB = event.getY(1) ;

       if(pointA < pointB) {

         float temp = pointA ;

         pointA = pointB ;

         pointB = temp ;

       }

       if(!(event.getAction() == MotionEvent.ACTION_UP)) {

         float scale = this.getScale(pointA, pointB) / SCALEBASIC;

         MyMultitouchDemo.this.setImage(scale, 300,450) ;

       }

     }

     return super.onTouchEvent(event);

  }

  private float getScale(float pointA,float pointB) {

     float scale = pointA / pointB ;

     return scale ;

  }

}

 

Android多点触控图片缩放技术实现 随着移动设备的普及,触控操作已成为用户与移动应用交互的主要方式之一。多点触控,顾名思义,就是设备同时响应多个触摸点(手指)的操作,它极大地提升了用户交互的灵活性与丰富度。在Android平台上,多点触控技术为开发者提供了强大的界面交互能力,尤其是在游戏、图片浏览、地图导航等场景中,其重要性不言而喻。Android系统通过一系列精心设计的API,使得多点触控的实现成为可能。这些API不仅能够识别每一个触摸点的具体位置和移动轨迹,还能将多个触摸点的信息综合起来,为开发者提供处理复杂手势和动态交互的工具。 阅读详情

相关推荐

实现Android中图片的双击缩放与多点触控

在Android开发中,自定义组件是扩展和深化应用功能的重要手段。与系统提供的标准组件相比,自定义组件提供了更高的灵活性和可定制性。ZoomImageView作为自定义组件,它的最大优势在于可以根据具体应用场景进行功能的拓展和性能的优化。系统组件如ImageView已内置了基本的图片显示功能,但其提供的功能相对固定,无法满足特定场景下的需求,例如实现图片的缩放和拖动等高级交互功能。

weixin_35189483的博客 842

Qt触摸屏双指缩放和单指移动界面(支持嵌入式设备)

2、在event事件管理器中接收触摸屏的三个事件,TouchBegin、TouchUpdate和TouchEnd。6、如果是单点触摸,通过比较手指放上去的位置和手指拖动时的位置来设置界面滚动条的位置。4、如果多点触摸,通过比较前后两次两点间触摸位置来判断是放大还是缩小。5、多点触摸时,会存在抖动情况,需要做防抖处理。3、判断单点触摸还是多点触摸。1、首先需要打开触摸屏功能。

weixin_43246170的博客 7982

【Android UI】SurfaceView中使用 Canvas 绘制可缩放大图 ( 拖动和缩放相关的变量 | Canvas 绘图函数 | 手势识别 多点触控流程 | 拖动图片 | 缩放图片 )

一、需求分析 和 核心要点 说明 1、需求说明 2、核心要点 - 拖动和缩放相关的变量 3、核心要点 - Canvas 绘图函数 4、核心要点 - 手势识别 多点触控流程 5、核心要点 - 拖动图片 6、核心要点 - 缩放图片 二、完整代码示例 1、环境说明 2、SurfaceView 完整代码 3、运行结果

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 3081

Qt触摸放大、缩小、拖拽图像

实现原理:接收widget的事件,paintEvent重绘地图,坐标比例什么的也是根据缩放和偏移量转换计算得出…简单粗暴,直接上代码吧!

qq_39851127的博客 2349

Qt 图片缩放,支持滚轮和按键缩放

Qt5.3.2 实现的图片缩放,支持滚轮和按键缩放,复位,切换图片

QT5.X多点触控使用双手指缩放图片源码

QT5.X版本的多点触控使用双手指缩放图片源码,使用QTCreater编译即可,已在imx6的Linux4.1.15上调试通过,该功能需要触摸屏支持多点触控,如果不支持就不用浪费时间了,第二,需要你自己把触摸屏的驱动移植好,且内核已支持多点触控

Qt实现手势缩放和平移(QGestureEvent)

qt手势事件处理

fhakfs的博客 4355

qt5实现多点触控window10

qt5实现多点触控window10

Qt 5.x 多点触摸配置

Qt 5.x 相对于 4.8 及以前版本在窗口系统上有较大幅度改动,原来的QWS被QPA完全取代,导致输入设备配置简化了很多,这里先简单记录一下,后期完善。 触摸屏配置可分两种方式,一种是电容屏或由驱动校准的电阻屏配置,另一种是需要借助tslib校准的电阻屏配置 一、第一种方式比较简单,只需要在系统内加入两个宏定义即可(之所以这么简单,是因为我们使用了Qt默认基于libinput插件),...

豪哥专栏 8369

手把手教你用STM32CubeMX和HAL库驱动DW3000:从SPI配置到第一个测距Demo

本文详细介绍了如何使用STM32CubeMX和HAL库驱动DW3000 UWB定位通信模块,从SPI配置到实现厘米级测距Demo的全过程。涵盖硬件连接、SPI通信调试、驱动移植及双向测距(TWR)算法实现,帮助开发者快速掌握UWB高精度定位技术,适用于仓储物流、智能家居等场景。

weixin_27038245的博客 485

华科软院研究生第一学期的事项(奖学金、学业、考试等)

奖助 研究生补助 每月500,全年共6000元 每个月月底学院会打到银行卡里 碰上开学、过年会延后发放 17年10月底发了9、10两个月的钱 18年3月底发了2、3月的钱 学业奖学金 17届全日制每人都有 按照考研最后综合成绩排名 前16 10000 前80 8000 其他 4000 大概11月底发 注意:第一年如果有挂科的话,第二年就不能参加学业奖学金评...

sjdeak的博客 3706

android 多点触控缩放,Android多点触控(图片的缩放Demo)

本文主要介绍Android的多点触控,使用了一个图片缩放的实例,来更好的说明其原理。需要实现OnTouchListener接口,重写其中的onTouch方法。实现效果图:源代码:布局文件:activity_main:xmlns:tools="http://schemas.android.com/tools"android:id="@+id/layout"android:layout_width="...

weixin_31050349的博客 281

从零搭建芯片设计环境:在Cadence虚拟机中集成QRC进行寄生参数提取

本文详细介绍了在Cadence虚拟机中集成QRC工具进行芯片设计中的寄生参数提取的全流程。从环境准备、QRC安装配置到实际提取操作,提供了完整的步骤指南和常见问题解决方案,帮助工程师高效搭建芯片设计环境并优化提取性能。

weixin_30379531的博客 618

Android多点触控技术实战,自由地对图片进行缩放和移动

在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果,虽然这种效果很炫很酷,但其实还只能算是一个半成品,因为照片墙中所有的图片都是只能看不能点的。因此本篇文章中,我们就来对这一功能进行完善,加入点击图片就能浏览大图的功能,并且在浏览大图的时候还可以通过多点触控的方式对图片进行缩放。 如果你还没有看过 Android瀑布流照片墙实现,体验不规则排列的美感 这篇文章,请尽量先去阅读完再来看本篇文章,因为这次的代码完全是在上次的基础上进行开发的。 那我们现在就开始动手吧,首先打开上次的PhotoWa

郭霖的专栏 6万+

汽车工程师必看:从CAN到Ethernet,6种车载通信协议全解析(附应用场景对比)

本文全面解析了从CAN到Ethernet的6种车载通信协议,包括CAN、LIN、MOST、FlexRay等,并对比了它们的应用场景和技术特点。文章详细介绍了各协议的演进历程、技术优势及在现代汽车中的混合网络架构设计,为汽车工程师提供了实用的协议选型指南和未来通信技术发展趋势。

weixin_28683689的博客 491

终于找到两个稳定好用的Docker镜像加速源,拉取速度提升几十倍!

国内使用Docker经常遇到镜像拉取慢、超时失败的问题🐳 本文分享两个亲测好用的免费镜像加速源⚡ 实测拉取速度从十几分钟缩短到几十秒,稳定性接近100%📊 支持一键配置脚本,支持多平台使用✨

XiaoqiangClub的博客 946

多点触控图片缩放linux,Android实现多点触控,自由缩放图片的实例代码

Android多点触控涉及到的知识点1、ScaleGestureDetector2、OnScaleGestureListener3、Matrix4、OnTouchListener四个知识点需要了解一下,需要注意的是Matrix在内存中是一个一维数组,操控图片的Matrxi是一个3X3的矩阵,在内存中也就是一个大小为9的一维数组。实现多点触控,自由变化图片1、 ImageView的基础上继承2、因为...

weixin_39866867的博客 201

【C/C++ 性能优化】提高C++程序的缓存命中率以优化性能

在探讨计算机性能优化的旅程中,我们常常被引导去关注算法的复杂度、代码的优化,或是更高效的数据结构。然而,有一个经常被忽视的角色在幕后默默地影响着程序的运行效率——那就是缓存(Cache)。正如哲学家亨利·戴维·梭罗在《瓦尔登湖》中所说:“细节是造成美丽的源泉”,在软件开发的世界里,对缓存的理解和优化,就是那些决定程序性能优雅与否的细节。

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3732

android 自由缩放图片大小,Android实现多点触控,自由缩放图片的实例代码

Android多点触控涉及到的知识点1、ScaleGestureDetector2、OnScaleGestureListener3、Matrix4、OnTouchListener四个知识点需要了解一下,需要注意的是Matrix在内存中是一个一维数组,操控图片的Matrxi是一个3X3的矩阵,在内存中也就是一个大小为9的一维数组。实现多点触控,自由变化图片1、 ImageView的基础上继承2、因为...

weixin_39884373的博客 193

如何实现一个用STM32F103C8T6作为主控芯片,加上AD8232、MAX30102 、MPU6050模块的用于运动中监测心率变异性??

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1212

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

图片的多点触控缩放与移动

整理自 鸿洋大神的慕课网视频 加了很多自己理解的注注释 package MyView; import android.content.Context; import android.graphics.Matrix; import android.graphics.RectF; import android.graphics.drawable.Drawab

WJC-keepGoing的博客 643

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Android 图片随着手势缩放,平移,并且支持多点触控

效果图: 现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位~~~ 想要做到图片支持多点触控,自由的进行缩放、平移,需要了解几个知识点:Matrix , GestureDetector , ScaleGestureDetector 以及事件分发机制 1、Matrix 参考:http:

豆子的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Android多点触控(图片的缩放Demo)

本文主要介绍Android的多点触控,使用了一个图片缩放的实例,来更好的说明其原理。需要实现OnTouchListener接口,重写其中的onTouch方法。 实现效果图: 源代码: 布局文件: activity_main: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

红日 2169
上一篇: 获取触摸两点的坐标
下一篇: 取得电池电量
Android人生
博客等级 码龄14年 14粉丝 184原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值