package com.fants.imageview;
import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.graphics.Rect;
import android.os.Bundle;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
public class MyImageViewActivity extends Activity {
private ImageView view;
Matrix matrix = new Matrix();
Rect rect;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
view = (ImageView) findViewById(R.id.image_View);
view.setOnTouchListener(new MulitPointTouchListener());
}
private 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;
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);
}
}
}
分享到:
相关推荐
然而,为了提供更加丰富的用户体验,我们经常需要实现一些高级功能,比如多点触碰(Multitouch)支持,使得用户能够通过手势来拖拽图片、移动图片位置以及缩放图片大小。在本教程中,我们将深入探讨如何在Android的...
本文将深入探讨如何利用Matrix处理ImageView中的图片缩放和平移操作。 首先,我们需要了解Matrix的基本概念。Matrix是一个3x3的浮点数矩阵,用于存储图像变换参数。在二维空间中,图像的坐标可以通过应用Matrix进行...
总之,这个项目提供了关于Android ImageView图片缩放和旋转的实现细节,对于Android开发者,尤其是对UI交互有较高要求的开发者而言,是一个值得学习和研究的案例。通过研究这些源码,开发者能够更好地掌握图片处理...
然而,原生的ImageView并不支持复杂的缩放功能,尤其是在用户需要查看大图或者实现类似图片浏览器的应用时,这成为一个限制。"Android 可缩放ImageView"是为了弥补这个不足,提供了一个支持用户交互式缩放的视图,...
在Android开发中,创建一个可拖动和缩放的ImageView是一项常见的需求,特别是在设计交互式应用或游戏时。本文将详细讲解如何实现这样一个功能,主要关注`onTouchListener`的使用和`ImageView`的`scaleType`属性。 ...
本教程将深入探讨如何通过继承ImageView类创建一个自定义控件,实现在屏幕上对图片进行拖拽、缩放和旋转的功能。这对于构建动态、交互性强的应用,如照片编辑器或画板应用,是非常有用的。 首先,我们需要创建一个...
然而,仅靠基本的ImageView功能,我们往往无法满足一些复杂的交互需求,比如用户可以对图片进行拖动和双指缩放。这种功能通常需要借助Matrix类来实现。Matrix是Android图形系统中的一个关键类,它允许我们对坐标系统...
"imageView图片缩放"这个主题主要关注如何在Android平台上实现图片的交互式缩放,包括双手缩放和双击放大功能,并且允许用户拖动查看图片的不同部分。这种功能常用于查看大图、照片浏览应用或者地图应用等。 一、...
在Android开发中,自定义控件是提升应用用户体验和满足...以上就是关于自定义ImageView图片缩放的核心知识点,希望对你的开发工作有所帮助。在实践中不断优化和调整,你将能构建出更加高效和用户友好的图片显示组件。
在Android开发中,实现双指拖动和双指缩放图片是常见的手势识别应用场景,尤其在图片查看器或画板类应用中极为常见。本文将深入探讨如何在Android平台上实现这一功能,以及如何将绘制的线条与背景图片进行正片叠底的...
在这个案例中,我们关注的是一个自定义的ImageView,它不仅支持单点缩放和回弹,还能进行拖拽操作,并且能够实现多点触控的缩放功能。这样的组件在创建交互式图片查看器或者画廊应用时非常有用。下面我们将详细讨论...
在Android开发中,有时我们需要创建一个用户可以自由拖动、缩放甚至旋转的ImageView,以提供更加丰富的交互体验。这个自定义的`DragZoom ImageView`就是为此目的设计的。在这个组件中,我们主要关注三个核心功能:...
三、图片缩放 1. 使用ScaleGestureDetector类来检测缩放手势。创建一个内部类,继承`SimpleOnScaleGestureListener`,重写`onScale()`方法。 2. 在`onScale()`方法中,根据缩放因子(scaleFactor)更新ImageView的`...
开发者需要在回调函数中计算新的缩放比例,并更新`ImageView`的`Matrix`以实现图片的缩放效果。`Matrix`是一个二维变换矩阵,可以用来进行平移、缩放、旋转等多种图形变换。 2. **手势平移**:对于单指滑动,`...
总的来说,Android手势滑动实现ImageView图片缩放的核心在于自定义OnTouchListener,监听和解析MotionEvent,通过Matrix对象来处理图片的平移和缩放操作。这种方式不仅增强了用户体验,还为开发者提供了更多的交互...
本知识点将详细介绍如何在Android中实现图片的移动和缩放裁剪。 首先,我们需要了解Android中处理图片的基础知识。Android提供了多种库和API来处理图像,例如Bitmap类用于表示位图图像,Matrix类则用于处理图像的...
在Android开发中,图片的处理是一项非常常见的任务,特别是在用户界面设计中,ImageView组件是展示图片的主要方式。本文将深入探讨如何在Android中实现图片的放大和缩小功能,特别是通过ImageView来实现这一目标。 ...
在Android开发中,图片拖拽删除功能是一种常见的交互方式,特别是在各种应用的相册或文件管理器中。本文将深入探讨如何实现这一功能,通过分析提供的"android图片拖拽删除"项目,我们可以学习到以下几个关键知识点:...
本文将深入探讨如何创建一个自定义的ImageView控件,该控件具备图片的缩放和拖拽功能,非常适合用于图片的浏览场景,能提供更加灵活且用户友好的交互体验。 首先,我们需要了解Android中的ImageView基础。ImageView...
本篇文章将深入探讨如何在Android应用中实现这个功能,包括双指缩放、单指拖拽以及图片拖动到边界时的回弹效果。 首先,我们需要了解Android中的手势检测。Android提供了`GestureDetector`和`ScaleGestureDetector`...