`
夏文权
  • 浏览: 245401 次
  • 性别: Icon_minigender_1
  • 来自: 贵州
社区版块
存档分类
最新评论

图片拖动和缩放功能

 
阅读更多

在图片拖动的基础上增加

package com.xiawenquan;

import android.app.Activity;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.FloatMath;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
	private ImageView imageView;
	private PointF startPoint = null;
	private Matrix matrix = null;
	private Matrix currMatrix ;
	private int drug = 5;
	private int zoom = 10;
	private int type = 0;
	private float startDistance;
	private PointF midPointF;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        startPoint = new PointF();
        matrix = new Matrix(); // 用于拖拉变换
        currMatrix = new Matrix(); // 用于拖拉变换
        
        
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setOnTouchListener(new View.OnTouchListener() {
			
			@Override
			public boolean onTouch(View view, MotionEvent event) {
				switch (event.getAction() & MotionEvent.ACTION_MASK) {
				case MotionEvent.ACTION_DOWN://只有一个手指按下屏幕时触发的事件
					currMatrix.set(matrix); // 保存上一次的移动点
					startPoint.set(event.getX(),event.getY());//移动前,手指按下的位置
					
					type = drug; // 只有一个手指按下屏幕时属于拖拉
					
					break;
				case MotionEvent.ACTION_MOVE://手指在屏幕移动时触发的事件,该事件在移动过程不断被触发
					if(type == drug){
						float mX = event.getX() - startPoint.x; // 移动点的X坐标
						float mY = event.getY() - startPoint.y;// 移动点的Y坐标
						matrix.set(currMatrix); // 保存当前变换的点
						matrix.postTranslate(mX, mY); // 移动到指定的点
					}else if(type == zoom){
						float distance = distance(event);
						if(distance > 5f){
							matrix.set(currMatrix); //在上次缩放结果的基本上进行缩放
							float cale =  distance / startDistance; // 获取距离的倍数
							matrix.preScale(cale, cale, midPointF.x, midPointF.y); // 前面2个参数是X,Y坐标缩放,后面的参考点的X,Y坐标
						}
						
					}
					
					break;
					
				case MotionEvent.ACTION_POINTER_DOWN://如果已经有一个手指按下屏幕,后续再有手指按下屏幕,就会触发这个事件
					startDistance = distance(event); // 保存2个手指的距离
					if(startDistance > 5f){ // 2个手指的最小距离是5个像素
						type = zoom;
						currMatrix.set(matrix); // 保存第一次缩放后的位置,用于2次以后的缩放(//保存当前的缩放结果)
						midPointF = getMidPoinF(event);
					}
					
					
					break;
					
				case MotionEvent.ACTION_UP://最后一个手指离开屏幕后触发的事件
					break;
				case MotionEvent.ACTION_POINTER_UP://有一个手指离开了屏幕,但还有手指在屏幕上,此时会触发该事件
					type = 0; // 当离开屏幕的时候还原。
					break;

				default:
					break;
				}
				
				imageView.setImageMatrix(matrix); // imageView在移动
				return true;
			}
		});
    }
    
    // 求两点的距离
    private float distance(MotionEvent event){
    	float eX = event.getX(1) - event.getX(0); // 后一个点减去前一个点
    	float eY = event.getY(1) - event.getY(0);
    	return  FloatMath.sqrt(eX * eX  + eY * eY);
    }
    
    // 求2点的中心点
    private PointF getMidPoinF(MotionEvent event){
    	float x = (event.getX(1) + event.getX(0)) / 2;
    	float y = (event.getY(1) + event.getY(0)) / 2;
    	return new PointF(x, y);
    }
}

 

分享到:
评论

相关推荐

    Csharp处理图片拖动和缩放功能

    ### C# 处理图片拖动与缩放功能详解 #### 概述 在现代图形用户界面(GUI)开发中,图片的拖动与缩放是常见且实用的功能之一。对于使用 C# 和 Windows Forms 开发的应用程序而言,实现这些功能可以显著提升用户体验...

    C#PictureBoxx显示图片,可鼠标拖动和缩放

    本篇文章将详细讲解如何在Visual Studio 2015中,利用.NET Framework 4.5.2,实现一个具有图片拖动和缩放功能的PictureBox。 首先,我们需要创建一个新的Windows Forms应用程序项目。打开Visual Studio 2015,选择...

    C#图片拖拽缩放工具

    在本文中,我们将深入探讨如何使用C#编程语言创建一个具备图片拖拽和缩放功能的工具。这个工具的核心功能是允许用户通过鼠标操作在界面上自由移动和调整图像的大小,提供直观的图像查看体验。 首先,我们需要了解C#...

    C#控件picturebox实现图像拖拽和缩放

    C#控件PictureBox实现图像拖拽和缩放 摘要:本篇文章主要介绍了C#控件PictureBox实现图像拖拽和缩放的方法,通过使用PictureBox控件的MouseDown、MouseUp和MouseMove事件来实现图像的拖拽和缩放。同时,本篇文章还...

    Android 图片拖动和缩放

    通过以上步骤,你可以实现一个基础的图片拖动和缩放功能。不过,实际项目中可能还需要考虑更多细节,比如手势冲突处理、手势的灵敏度调整、多点触控的支持等。在阅读提供的博客链接后,你会找到更具体的代码示例和...

    Winform图片拖拽移动缩放

    以上代码展示了基本的图片拖拽和缩放功能,你可以根据实际需求进行扩展,如添加边界检查以防止图片移出控件范围,或者增加平滑滚动效果等。 在提供的压缩包文件"ImageMoveZoom"中,可能包含了实现这些功能的源代码...

    WinForm实现的图片拖拽与缩放功能示例

    图片缩放是实现图片拖拽和缩放功能的重要一环,通过PictureBox控件的SizeMode属性可以实现图片的缩放功能。 WinForm实现的图片拖拽与缩放功能示例主要包括了鼠标事件响应、图片元素动态操作技巧和PictureBox控件的...

    hammer 对图片的拖拽 缩放

    `hammer.js`是一个轻量级的JavaScript库,专为触摸设备设计,提供了丰富的手势识别功能,如拖拽、旋转、缩放等。在这个名为"hammer 对图片的拖拽 缩放"的示例中,我们将探讨如何使用`hammer.js`来实现图片的动态操作...

    图片的拖拽和缩放

    结合“工具”标签,我们可以考虑使用现有的库,如jQuery UI或PixiJS等,它们提供了完善的拖拽和缩放功能,使得开发者能更快速、方便地实现这些交互。例如,jQuery UI的`draggable`和`resizable`插件可以直接应用到...

    Android 多点触控,多张图片拖拽,缩放,旋转

    在Android平台上,实现多点触控、多张图片的拖拽、缩放和旋转功能是一项常见的需求,尤其在开发互动式应用或者图像编辑类应用时。以下是对这一主题的详细阐述。 **一、多点触控(Multi-Touch)** 多点触控是指设备...

    微信小程序 图片缩放拖动

    由于压缩包中删除了两个gif图片,这不会影响核心的图片缩放和拖动功能,因为这些图片可能只是示例或者用于演示效果。 综上所述,微信小程序实现图片缩放和拖动的关键在于监听触摸事件,动态计算图片的缩放比例和...

    微信小程序自定义组件实现图片单指拖动双指缩放效果

    在这个组件的`js`文件中,我们将实现图片拖动和缩放的核心逻辑。 对于单指拖动效果,我们需要监听`touchstart`, `touchmove`和`touchend`这三个触摸事件。在`touchstart`事件中记录初始触摸点的位置,在`touchmove`...

    图片的拖动与缩放

    在网页应用中,为了保证在不同屏幕尺寸下的良好体验,图片的拖动和缩放功能需要考虑响应式设计。这可能涉及到媒体查询(media queries)和自适应布局,确保在任何设备上都能正常工作。 8. **性能优化**: 当图片...

    Unity 实现UI窗口拖拽缩放

    在Unity里面实现UI窗口的操作,包含拖动,单边拖动缩放,对角拖拽缩放功能

    imageQ图片缩放拖拽jQuery小插件

    jQuery插件则是对jQuery核心功能的扩展,提供了更丰富的功能和便利性。`imageQ`作为jQuery插件,借助jQuery的API和事件机制,实现了图片的动态操作功能。 **图片放大与缩小** `imageQ`插件支持图片的放大和缩小操作...

    C#编写的用GDI绘制的图片显示、拖动、缩放自定义控件

    通过这些步骤,我们就实现了一个基本的自定义图片控件,具备了图片显示、拖动和缩放功能。 在实际项目中,你可能还需要添加更多功能,如平滑缩放、边界检查防止图片超出控件范围、旋转等。通过不断扩展和优化,这个...

    C#实现图像拖拽、锚点缩放【以鼠标所指位置为中心缩放】

    在C#编程中,图像处理是一项常见的任务,其中包括图像的拖拽和缩放功能。本文将详细介绍如何在C#环境中实现图像的拖拽以及以鼠标所指位置为中心的锚点缩放。 首先,我们需要理解图像拖拽的基本原理。在Windows ...

Global site tag (gtag.js) - Google Analytics