`
不夜的星辰
  • 浏览: 88332 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android 多点触摸实现图片缩放

阅读更多
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"

注:此文档为转载
分享到:
评论
2 楼 zhujinyuan 2012-08-29  
这种形式控制不了无限放大。
1 楼 烧伤的火柴 2011-12-02  

相关推荐

    android 多点触摸图片缩放的具体实现方法

    在本篇文章中,我们将探讨如何在Android应用中实现多点触摸图片缩放的具体方法。 首先,我们需要创建一个可以响应多点触摸事件的布局。在给出的XML布局文件中,我们可以看到一个`RelativeLayout`作为根视图,其中...

    Android自定义多点触摸图片缩放控件

    在Android开发中,创建一个支持多点触摸图片缩放的自定义控件是一项常见的需求,尤其在设计交互式应用或图像查看器时。这个控件允许用户通过两个手指的动作来放大或缩小显示的图片,提供了丰富的用户体验。下面将...

    Android多点触摸示例源代码

    一、Android多点触摸基础 Android系统通过`MotionEvent`类支持多点触摸。`MotionEvent`对象包含了触摸事件的所有信息,如动作类型(ACTION_DOWN、ACTION_UP、ACTION_MOVE等)、坐标位置以及点的数量。当多个手指...

    Demo 多点触摸 缩放 图片

    在图片缩放的场景下,捏合手势是最关键的,它模拟了人们在现实世界中调整物体大小的动作,一个手指固定,另一个手指靠近或远离,以实现放大或缩小。 要实现这个功能,开发者通常会使用UIKit(iOS)或Android SDK中...

    android 2.1 多点触摸演示

    - 图片查看器:通过双指缩放实现图片放大缩小。 - 游戏:控制角色移动、射击等操作。 - 地图应用:通过双指滑动实现地图的平移和缩放。 - 演示文稿:支持手势控制翻页。 - 设计工具:多点触摸可以用于选择、移动和...

    通过单点多点触摸来进行图片缩放的智能控件

    在Android开发中,实现“通过单点多点触摸来进行图片缩放的智能控件”是一项常见的需求,这通常涉及到用户交互和图像处理技术。这个控件的实现基于Android的触摸事件处理机制,允许用户通过手指的触摸动作来对图片...

    多点触摸实现图片的放大

    在Android平台上,多点触摸(Multi-touch)技术是一种增强用户交互体验的重要特性,尤其对于图片放大、缩小以及网页滑动浏览等功能来说,它提供了更为直观和自然的操作方式。本文将深入探讨如何在Android 2.x版本中...

    Android 多点触摸(Multitouch ImageView)

    综上所述,实现一个支持多点触摸的Multitouch ImageView需要理解Android的触摸事件处理机制,掌握Matrix和Animator的使用,以及如何处理拖拽、缩放和旋转等操作。通过对这些知识点的深入理解和实践,开发者可以创建...

    Android手机屏幕截图和图片多点触摸缩放

    本文将详细探讨两种在Android手机上实现屏幕截图的方法,并重点介绍一种用于图片多点触摸缩放的工具类,帮助开发者创建更加互动和用户体验良好的应用。 首先,让我们来看看Android手机如何进行屏幕截图。方法一,...

    图片浏览单点/多点触摸来进行图片缩放

    1. **图片缩放**:用户可以通过单指捏合手势轻松缩放图片,无论是放大查看细节还是缩小整体概览,都极其方便。控件会自动处理图片的缩放比例,保持其原始宽高比。 2. **平移功能**:除了缩放,`PhotoView`还允许...

    安卓图片多点触摸缩放源码

    总的来说,这个源码示例是一个实用的教程,可以帮助开发者理解如何在Android应用中实现图片的多点触摸缩放功能,同时也为自定义视图的开发提供了参考。通过深入研究并理解这段代码,开发者可以更好地掌握Android中的...

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

    本项目"PhotoWallFallsDemo"就是一个典型的实例,演示了如何在Android应用中实现实时的图片缩放和移动功能。 首先,我们要理解Android中的触控事件处理机制。Android系统通过MotionEvent类来处理触摸事件,包括...

    图片缩放和多点触摸.zip

    在Android开发中,图片缩放和多点触摸是两个关键的技术点,特别是在创建交互式用户界面和图形应用时。本文将深入探讨这两个概念,并结合源码分析如何在Android平台上实现它们。 首先,我们来理解图片缩放。在...

    Android屏幕多点触摸

    在本篇内容中,我们将深入探讨如何实现Android屏幕的多点触摸功能,并进行相关的测试。 首先,理解Android中的触摸事件处理机制是至关重要的。Android通过MotionEvent类来处理触摸事件,这个类封装了用户的触摸行为...

    多点触控 图片的缩放

    多点触控图片缩放功能为用户提供了更自然、直观的交互体验。通过监听触摸事件、计算缩放比例、更新图片视图以及使用Gallery容器管理多张图片,开发者可以构建出功能丰富的图片查看应用。同时,优化性能是确保流畅...

    android多点触摸

    以下是一个简单的多点触摸图片缩放的实现步骤: 1. 在onTouchEvent中,检查ACTION_DOWN事件,记录下第一个触点的坐标(x1, y1)。 2. 当第二个触点按下时(ACTION_POINTER_DOWN),记录下第二个触点的坐标(x2, y2...

    android多点触控缩放图片

    以上就是Android多点触控缩放图片的核心知识点,实际应用中可能还需要考虑手势冲突、手势流畅度、图片质量等因素,但这个基础框架能帮助你开始实现基本的缩放功能。记得在实践中不断优化和完善,以提供更好的用户...

    Android 图片缩放和多点触摸-IT计算机-毕业设计.zip

    在Android平台上,图片缩放和多点触摸是两个重要的交互技术,尤其对于图像查看器、地图应用等场景至关重要。这份毕业设计的源码Demo旨在帮助学生深入理解和掌握这两个功能的实现,为论文撰写提供实际操作案例。 ...

Global site tag (gtag.js) - Google Analytics