本文主要介绍Android的多点触控,使用了一个图片缩放的实例,来更好的说明其原理。须要实现OnTouchListener接口,重写当中的onTouch方法。

实现效果图:

     

源码:

布局文件:

activity_main:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/layout"
android:layout_width="match_parent"
android:layout_height="match_parent" > <ImageView
android:id="@+id/imageView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_launcher" /> </RelativeLayout>

代码:

package com.multitouch;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams; /**
* 多点触控Demo实例: 图片的缩放。
*
*/
public class MainActivity extends Activity {
private RelativeLayout layout;
protected String TAG = "zhongyao";
private ImageView imageView;
private float currentDistance;
private float lastDistance = -1; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); layout = (RelativeLayout) findViewById(R.id.layout);
imageView = (ImageView) findViewById(R.id.imageView); layout.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction()) {
/**
* 手指按下
*/
case MotionEvent.ACTION_DOWN:
Log.d(TAG, "down!!!");
break;
/**
* 手指移动
*/
case MotionEvent.ACTION_MOVE:
Log.d(TAG, "move!!!");
/**
* 首先推断按下手指的个数是不是大于两个。
* 假设大于两个则运行下面操作(即图片的缩放操作)。
*/
if (event.getPointerCount() >= 2) { float offsetX = event.getX(0) - event.getX(1);
float offsetY = event.getY(0) - event.getY(1);
/**
* 原点和滑动后点的距离差
*/
currentDistance = (float) Math.sqrt(offsetX * offsetX
+ offsetY * offsetY);
if (lastDistance < 0) {
lastDistance = currentDistance;
} else {
/**
* 假设当前滑动的距离(currentDistance)比最后一次记录的距离(lastDistance)相比大于5英寸(也能够为其它尺寸),
* 那么现实图片放大
*/
if (currentDistance - lastDistance > 5) {
Log.d(TAG, "放大!!!");
RelativeLayout.LayoutParams lp = (LayoutParams) imageView
.getLayoutParams();
/**
* 图片宽高一次放大为原来图片的1.1倍(当然,也能够为其它数值)。
*/
lp.width = (int) (imageView.getWidth() * 1.1);
lp.height = (int) (imageView.getHeight() * 1.1);
imageView.setLayoutParams(lp);
lastDistance = currentDistance;
/**
* 假设最后的一次记录的距离(lastDistance)与当前的滑动距离(currentDistance)相比小于5英寸,
* 那么图片缩小。
*/
} else if (lastDistance - currentDistance > 5) {
Log.d(TAG, "缩小!!!");
RelativeLayout.LayoutParams lp = (LayoutParams) imageView
.getLayoutParams();
/**
* 图片宽高一次缩小为原来图片的0.9倍。
*/
lp.width = (int) (imageView.getWidth() * 0.9);
lp.height = (int) (imageView.getHeight() * 0.9);
imageView.setLayoutParams(lp);
lastDistance = currentDistance;
}
}
}
break;
/**
* 手指抬起
*/
case MotionEvent.ACTION_UP:
Log.d(TAG, "up!!!");
break;
}
return true;
}
});
} }

源码下载:

点击下载源代码

Android多点触控(图片的缩放Demo)的更多相关文章

  1. Android多点触控技术

    1 简介 Android多点触控在本质上需要LCD驱动和程序本身设计上支持,目前市面上HTC.Motorola和Samsung等知名厂商只要使用电容屏触控原理的手机均可以支持多点触控Multitouc ...

  2. [yueqian_scut]Android多点触控技术和应用框架

    Android多点触控技术跟Linux输入子系统紧密相关.本文将从应用的角度说明Android多点触控技术的接口和应用. 一.多点触控场景分析 网络上有关Android多点触控技术的文章多见于两点拉伸 ...

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

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/11100327 在上一篇文章中我带着大家一起实现了Android瀑布流照片墙的效果, ...

  4. (干货) Android实现ImageVIew多点触控及双击缩放

    支持多点触控,放大自由移动,双击可以放大缩小.直接上代码: package com.cbt.view; import android.content.Context; import android.g ...

  5. Android多点触控技术,实现对图片的放大缩小平移,惯性滑动等功能

    首先推荐一下鸿洋大大的打造个性的图片预览与多点触控视频教程,这套教程教我们一步一步实现了多点触控实现对图片的平移和缩放的功能.这篇文章我将在鸿洋大大的基础之上做了一些扩展功能: 1.图片的惯性滑动 2 ...

  6. Android 多点触控与简单手势(一)

    现在一般的Android手机都会使用电容触摸屏最少可以支持两点触摸,多的可能是七八个,所以基本上都会支持多点触控, android系统中应用程序可以使用多点触控的事件来完成各种手势和场景需求. And ...

  7. (一)自定义ImageView,初步实现多点触控、自由缩放

    真心佩服那些一直专注于技术共享的大神们,正是因为他们无私的分享精神,我才能每天都有进步.近日又算是仔细学了android的自定义控件技术,跟着大神的脚步实现了一个自定义的ImageView.里面涉及到 ...

  8. 关于android多点触控

    最近项目需要一个多点触控缩放的功能.然后上网查了下资料 总结一下: 首先android sdk版本很重要,比如你在AndroidManifest.xml中指定android:minSdkVersion ...

  9. Android 多点触控错误处理(java.lang.IllegalArgumentException: pointerIndex out of range)

    最近做View的多点触控时,每次第一次触控事件完美运行,第二次就直接崩了,错误信息如下: 01-03 00:05:44.220 4377-4410/system_process E/AndroidRu ...

随机推荐

  1. 怎样处理iOS 5与iOS 6的 low-memory

    移动设备终端的内存极为有限,应用程序必须做好low-memory处理工作,才能避免程序因内存使用过大而崩溃. low-memory 处理思路 通常一个应用程序会包含多个view controllers ...

  2. 解决windows下的mysql匿名登陆无法使用mysql数据库的问题

    原文:解决windows下的mysql匿名登陆无法使用mysql数据库的问题 我在windows下安装了mysql,但是不用密码就能登进去,而root明明是有密码的,我用select user()命令 ...

  3. 让window命令行支持自己主动补全[相似Linux的Tab键]

    打开注冊表,找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor下 项"CompletionChar"(REG_DWO ...

  4. MapReduce 异常 LongWritable cannot be cast to Text

    有一个txt文件,内容格公式是这样的: 深圳订做T恤 5729944 深圳厂家t恤批发 5729945 深圳定做文化衫 5729944 文化衫厂家 5729944 订做文化衫 5729944 深圳t恤 ...

  5. SE 2014年4月3日

    一  OSPF协议都支持哪些特殊区域?每种特殊区域都有什么特点. OSPF协议支持的特殊区域主要有stub区域.totally stub区域以及nssa区域,其中stub区域一般出现在末梢网络,即它的 ...

  6. php 汉字转拼音 [包含20902个基本汉字+5059生僻字]

    原文:php 汉字转拼音 [包含20902个基本汉字+5059生僻字] 昨天在转换拼音的时候发现个bug,有好多字都无法转换,不过也不能怪他,毕竟人家的库才8k,应该只有常用的.无奈上网找了下,发现一 ...

  7. Mac中如何写NTFS的移动硬盘

    Mac中如何写NTFS的移动硬盘 按 照网上的说法,简单的就是购买Paragon NTFS或者Tuxera NTFS之类的收费软件,不想花钱的就用NTFS-3G.作为一个开发人员,既然能够自己解决,当 ...

  8. Monkey源代码分析之执行流程

    在<MonkeyRunner源代码分析之与Android设备通讯方式>中.我们谈及到MonkeyRunner控制目标android设备有多种方法.当中之中的一个就是在目标机器启动一个mon ...

  9. POJ 2536 Gopher II(二分图的最大匹配)

    题目链接:http://poj.org/problem?id=2536 题意:已知有n仅仅老鼠的坐标,m个洞的坐标,老鼠的移动速度为V,S秒以后有一仅仅老鹰要吃老鼠,问有多少个老鼠被吃. 非常明晰,二 ...

  10. oracle 11g impdp时 报ORA-12899(转)

    源库ZHS16BGK,汉字在数据库存放的时候占用两个字节 目标库UTF8,汉字在数据库里存放的时候占用三个字节 由于字符集不同,导致现在数据库impdp的时候有些表的字段长度不够,出现ORA-1289 ...