• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > MultiTouch————多点触控,伸缩图片,变换图片位置,

MultiTouch————多点触控,伸缩图片,变换图片位置,

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了multitouch,multitouch是什么意思,apple multitouch,multitouch bar,multitouch tester等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

MultiTouch————多点触控,伸缩图片,变换图片位置,


前言:当今的手机都支持多点触控功能(可以进行图片伸缩,变换位置),但是我们程序员要怎样结合硬件去实现这个功能呢?

跟随我一起,来学习这个功能

国际惯例:先上DEMO免费下载地址:http://download.csdn.net/detail/cnwutianhao/9443667

示例图片:

 

我是用Genymotion录制的,没有真机上多点触控显示的效果那么好,大家在真机上跑程序,会体会到多点触控功能。(注:Genymotion多点触控快捷键是 ctrl+鼠标指针上下拖动)


具体代码实现:


布局文件 activtiy_main.xml

 

 1     <?xml version="1.0" encoding="utf-8"?>  
 2     <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
 3         xmlns:tools="http://schemas.android.com/tools"  
 4         android:layout_width="match_parent"  
 5         android:layout_height="match_parent"  
 6         tools:context="com.cnwuth.mutiltouch.MainActivity">  
 7       
 8         <ImageView  
 9             android:id="@+id/iv"  
10             android:layout_width="match_parent"  
11             android:layout_height="match_parent"  
12             android:scaleType="matrix"  
13             android:src="@mipmap/ic_launcher"/>  
14       
15     </RelativeLayout>  

 

MainActivity.java

 

  1     package com.cnwuth.mutiltouch;  
  2       
  3     import android.graphics.Matrix;  
  4     import android.graphics.PointF;  
  5     import android.support.v7.app.AppCompatActivity;  
  6     import android.os.Bundle;  
  7     import android.view.MotionEvent;  
  8     import android.view.View;  
  9     import android.widget.ImageView;  
 10       
 11     public class MainActivity extends AppCompatActivity implements View.OnTouchListener{  
 12       
 13         private ImageView mImageView;  
 14       
 15         //缩放控制  
 16         private Matrix mMatrix = new Matrix();  
 17         private Matrix savedMatrix = new Matrix();  
 18       
 19         //不同状态的表示  
 20         private static final int NONE = 0;  
 21         private static final int DRAG = 1;  
 22         private static final int ZOOM = 2;  
 23         private int mode = NONE;  
 24       
 25         //定义第一个按下的点,两只接触点的重点,以及出事的两指按下的距离:  
 26         private PointF startPoint = new PointF();  
 27         private PointF midPoint = new PointF();  
 28         private float oriDis = 1f;  
 29       
 30         @Override  
 31         protected void onCreate(Bundle savedInstanceState) {  
 32             super.onCreate(savedInstanceState);  
 33             setContentView(R.layout.activity_main);  
 34             mImageView = (ImageView) findViewById(R.id.iv);  
 35             mImageView.setOnTouchListener(this);  
 36         }  
 37       
 38         @Override  
 39         public boolean onTouch(View v, MotionEvent event) {  
 40             ImageView view = (ImageView) v;  
 41             switch (event.getAction() & MotionEvent.ACTION_MASK)  
 42             {  
 43                 //单指  
 44                 case MotionEvent.ACTION_DOWN:  
 45                     mMatrix.set(view.getImageMatrix());  
 46                     savedMatrix.set(mMatrix);  
 47                     startPoint.set(event.getX(),event.getY());  
 48                     mode = DRAG;  
 49                     break;  
 50                 //双指  
 51                 case MotionEvent.ACTION_POINTER_DOWN:  
 52                     oriDis = distance(event);  
 53                     if (oriDis > 10f)  
 54                     {  
 55                         savedMatrix.set(mMatrix);  
 56                         midPoint = middle(event);  
 57                         mode = ZOOM;  
 58                     }  
 59                     break;  
 60                 //手指放开  
 61                 case MotionEvent.ACTION_UP:  
 62                 case MotionEvent.ACTION_POINTER_UP:  
 63                     mode = NONE;  
 64                     break;  
 65                 //单指滑动事件  
 66                 case MotionEvent.ACTION_MOVE:  
 67                     if (mode == DRAG)  
 68                     {  
 69                         //是一个手指拖动  
 70                         mMatrix.set(savedMatrix);  
 71                         mMatrix.postTranslate(event.getX() - startPoint.x , event.getY() - startPoint.y);  
 72                     }  
 73                     else if (mode == ZOOM)  
 74                     {  
 75                         //两个手指滑动  
 76



 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MultiTouch————多点触控,伸缩图片,变换图片位置,

相关文章

  • 2017-05-26Android Studio创建/打开项目时一直处于Building“project name”Gradle project info的解决办法,androidgradle
  • 2017-05-26Android四大组件之BroadcastReceiver
  • 2017-05-26解决Android后台清理APP后,程序自动重启的问题,androidapp
  • 2017-05-227.1.2 Android Http请求头与响应头的学习
  • 2017-05-26连点处理,禁止按钮在短时间内被多次点击,按钮短时间内
  • 2017-05-26ButterKnife注解框架详解,butterknife注解框架
  • 2017-05-26android:ListView缓存机制及BaseAdapter的三重境界(逗比式,普通式,文艺式)
  • 2017-05-26安卓开源项目周报1220,安卓开源项目1220
  • 2017-05-26点击文本改变改行背景色,弹出对话框,改行背景
  • 2017-05-228.3.2 绘图类实战示例

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 获取LayoutInflater对象的方法和inflate方法的一些参数问题,inflater.inflate参数
    • 关于在R中无法引用自己的xml文件,引用xml文件
    • JSON解析和XML解析对比,JSON解析XML解析
    • 安卓自定义view(简单折线图),安卓自定义view折线
    • arcgis andriod 加载影像,arcgisandriod
    • Volley的基本使用,Volley使用
    • 利用zabbix监控国际线路的延迟情况
    • 统计Git版本库每个人提交次数和代码的增加和删除行数脚本
    • Android—基于Socket与上传图片到客户端,
    • Android 无标题 全屏设置,android无标题全屏

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有