package com.touch;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class MulitPointTouchListener implements OnTouchListener {
Matrix matrix = new Matrix();
Matrix savedMatrix = new Matrix();
static final int NONE = 0;
static final int DRAG = 1;
static final int ZOOM = 2;
int mode = NONE;
PointF start = new PointF();
PointF mid = new PointF();
float oldDist = 1f;
@Override
public boolean onTouch(View v, MotionEvent event) {
ImageView view = (ImageView) v;
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
matrix.set(view.getImageMatrix());
savedMatrix.set(matrix);
start.set(event.getX(), event.getY());
mode = DRAG;
break;
case MotionEvent.ACTION_POINTER_DOWN:
oldDist = spacing(event);
if (oldDist > 10f) {
savedMatrix.set(matrix);
midPoint(mid, event);
mode = ZOOM;
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
mode = NONE;
break;
case MotionEvent.ACTION_MOVE:
if (mode == DRAG) {
matrix.set(savedMatrix);
matrix.postTranslate(event.getX() - start.x, event.getY()
- start.y);
} else if (mode == ZOOM) {
float newDist = spacing(event);
if (newDist > 10f) {
matrix.set(savedMatrix);
float scale = newDist / oldDist;
matrix.postScale(scale, scale, mid.x, mid.y);
}
}
break;
}
view.setImageMatrix(matrix);
return true;
}
private float spacing(MotionEvent event) {
float x = event.getX(0) - event.getX(1);
float y = event.getY(0) - event.getY(1);
return FloatMath.sqrt(x * x + y * y);
}
private void midPoint(PointF point, MotionEvent event) {
float x = event.getX(0) + event.getX(1);
float y = event.getY(0) + event.getY(1);
point.set(x / 2, y / 2);
}
}
imageView.setOnTouchListener(new MulitPointTouchListener ());在xml中要将图片的缩放格式改成Matrix
注:android:scaleType="matrix"
注:此文档为转载
分享到:
相关推荐
在本篇文章中,我们将探讨如何在Android应用中实现多点触摸图片缩放的具体方法。 首先,我们需要创建一个可以响应多点触摸事件的布局。在给出的XML布局文件中,我们可以看到一个`RelativeLayout`作为根视图,其中...
在Android开发中,创建一个支持多点触摸图片缩放的自定义控件是一项常见的需求,尤其在设计交互式应用或图像查看器时。这个控件允许用户通过两个手指的动作来放大或缩小显示的图片,提供了丰富的用户体验。下面将...
一、Android多点触摸基础 Android系统通过`MotionEvent`类支持多点触摸。`MotionEvent`对象包含了触摸事件的所有信息,如动作类型(ACTION_DOWN、ACTION_UP、ACTION_MOVE等)、坐标位置以及点的数量。当多个手指...
在图片缩放的场景下,捏合手势是最关键的,它模拟了人们在现实世界中调整物体大小的动作,一个手指固定,另一个手指靠近或远离,以实现放大或缩小。 要实现这个功能,开发者通常会使用UIKit(iOS)或Android SDK中...
- 图片查看器:通过双指缩放实现图片放大缩小。 - 游戏:控制角色移动、射击等操作。 - 地图应用:通过双指滑动实现地图的平移和缩放。 - 演示文稿:支持手势控制翻页。 - 设计工具:多点触摸可以用于选择、移动和...
在Android开发中,实现“通过单点多点触摸来进行图片缩放的智能控件”是一项常见的需求,这通常涉及到用户交互和图像处理技术。这个控件的实现基于Android的触摸事件处理机制,允许用户通过手指的触摸动作来对图片...
在Android平台上,多点触摸(Multi-touch)技术是一种增强用户交互体验的重要特性,尤其对于图片放大、缩小以及网页滑动浏览等功能来说,它提供了更为直观和自然的操作方式。本文将深入探讨如何在Android 2.x版本中...
综上所述,实现一个支持多点触摸的Multitouch ImageView需要理解Android的触摸事件处理机制,掌握Matrix和Animator的使用,以及如何处理拖拽、缩放和旋转等操作。通过对这些知识点的深入理解和实践,开发者可以创建...
本文将详细探讨两种在Android手机上实现屏幕截图的方法,并重点介绍一种用于图片多点触摸缩放的工具类,帮助开发者创建更加互动和用户体验良好的应用。 首先,让我们来看看Android手机如何进行屏幕截图。方法一,...
1. **图片缩放**:用户可以通过单指捏合手势轻松缩放图片,无论是放大查看细节还是缩小整体概览,都极其方便。控件会自动处理图片的缩放比例,保持其原始宽高比。 2. **平移功能**:除了缩放,`PhotoView`还允许...
总的来说,这个源码示例是一个实用的教程,可以帮助开发者理解如何在Android应用中实现图片的多点触摸缩放功能,同时也为自定义视图的开发提供了参考。通过深入研究并理解这段代码,开发者可以更好地掌握Android中的...
本项目"PhotoWallFallsDemo"就是一个典型的实例,演示了如何在Android应用中实现实时的图片缩放和移动功能。 首先,我们要理解Android中的触控事件处理机制。Android系统通过MotionEvent类来处理触摸事件,包括...
在Android开发中,图片缩放和多点触摸是两个关键的技术点,特别是在创建交互式用户界面和图形应用时。本文将深入探讨这两个概念,并结合源码分析如何在Android平台上实现它们。 首先,我们来理解图片缩放。在...
在本篇内容中,我们将深入探讨如何实现Android屏幕的多点触摸功能,并进行相关的测试。 首先,理解Android中的触摸事件处理机制是至关重要的。Android通过MotionEvent类来处理触摸事件,这个类封装了用户的触摸行为...
多点触控图片缩放功能为用户提供了更自然、直观的交互体验。通过监听触摸事件、计算缩放比例、更新图片视图以及使用Gallery容器管理多张图片,开发者可以构建出功能丰富的图片查看应用。同时,优化性能是确保流畅...
以下是一个简单的多点触摸图片缩放的实现步骤: 1. 在onTouchEvent中,检查ACTION_DOWN事件,记录下第一个触点的坐标(x1, y1)。 2. 当第二个触点按下时(ACTION_POINTER_DOWN),记录下第二个触点的坐标(x2, y2...
以上就是Android多点触控缩放图片的核心知识点,实际应用中可能还需要考虑手势冲突、手势流畅度、图片质量等因素,但这个基础框架能帮助你开始实现基本的缩放功能。记得在实践中不断优化和完善,以提供更好的用户...
在Android平台上,图片缩放和多点触摸是两个重要的交互技术,尤其对于图像查看器、地图应用等场景至关重要。这份毕业设计的源码Demo旨在帮助学生深入理解和掌握这两个功能的实现,为论文撰写提供实际操作案例。 ...