`

Matrix实现旋转,缩放,平移

 
阅读更多
public class Main extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		
		
		MyView myView = new MyView(Main.this);
		setContentView(myView);
	}

	// 自定义视图类
	class MyView extends View {
		private Bitmap bitmap;
		private Matrix matrix = new Matrix();// Matrix 实例
		private float angle = 0.0f;// Matrix 实例
		private int w, h;// 位图宽和高
		private float scale = 1.0f;// 缩放比例
		private boolean isScale = false;// 判断缩放还是旋转

		// 构造方法
		public MyView(Context context) {
			super(context);
			bitmap = BitmapFactory.decodeResource(this.getResources(),
					R.drawable.girl);// 获得位图
			w = bitmap.getWidth();// 获得位图宽
			h = bitmap.getHeight();// 获得位图高
			this.setFocusable(true);// 使当前视图获得焦点
		}

		@Override
		protected void onDraw(Canvas canvas) {
			super.onDraw(canvas);
			matrix.reset();// 重置Matrix
			if (!isScale) {
				matrix.setRotate(angle);// 旋转Matrix
			} else {
				matrix.setScale(scale, scale);// 缩放Matrix
			}
			Bitmap bitmap2 = Bitmap.createBitmap(bitmap, 0, 0, w, h, matrix,
					true); // 根据原始位图和Matrix创建新视图
			canvas.drawBitmap(bitmap2, matrix, null);// 绘制新视图
		}

		@Override
		public boolean onKeyDown(int keyCode, KeyEvent event) {
			// 向左旋转
			if (keyCode == KeyEvent.KEYCODE_DPAD_LEFT) {
				isScale = false;
				angle++;
				postInvalidate();
			}
			// 向右旋转
			if (keyCode == KeyEvent.KEYCODE_DPAD_RIGHT) {
				isScale = false;
				angle--;
				postInvalidate();
			}
			// 放大
			if (keyCode == KeyEvent.KEYCODE_DPAD_UP) {
				isScale = true;
				if (scale < 2.0)
					scale += 0.1;
				postInvalidate();
			}
			// 缩小
			if (keyCode == KeyEvent.KEYCODE_DPAD_DOWN) {
				isScale = true;
				if (scale > 0.5)
					scale -= 0.1;
				postInvalidate();
			}

			return super.onKeyDown(keyCode, event);
		}
	}
}

 

分享到:
评论

相关推荐

    可手势缩放平移及旋转的ImageView

    本项目就是这样一个例子,名为"可手势缩放平移及旋转的ImageView",它扩展了标准的`ImageView`,增加了对手势操作的支持。 首先,我们来看一下这个自定义的`ImageView`是如何处理手势的。手势识别在Android中主要...

    android 利用matrix实现图片的旋转与缩放

    Matrix类在Android图形处理中扮演着重要角色,它是一个3x3的矩阵,用于进行2D变换,如平移、旋转、缩放和倾斜等。本教程将深入讲解如何利用Matrix实现图片的旋转与缩放。 首先,我们需要了解Matrix的基本操作。在...

    旋转缩放平移控件完美版.rar

    标题提到的"旋转缩放平移控件完美版.rar"提供了一个解决方案,允许用户通过触摸屏幕进行单指平移、单双指旋转和缩放的操作。 首先,我们来看看核心文件`MoveLayout.java`。这个文件很可能定义了一个自定义布局,...

    OpenGL程序平移、旋转、缩放变换_OpenGL程序平移、旋转、缩放变换_

    在OpenGL中,对物体进行平移、旋转和缩放变换是图形处理的基础。这些变换可以帮助我们创建动态和交互式的场景。下面我们将详细讲解OpenGL中的这些基本变换。 **一、平移变换** 平移变换是将物体在三维空间中移动到...

    Android Matrix处理ImageView中图片缩放,平移

    Matrix类是Android提供的一种强大的工具,它允许我们对图像进行复杂的几何变换,如旋转、缩放、平移和倾斜。本文将深入探讨如何利用Matrix处理ImageView中的图片缩放和平移操作。 首先,我们需要了解Matrix的基本...

    图形学 - OpenGL实现图形平移旋转缩放源码2个

    平移旋转缩放"和"1 平移旋转缩放"可能包含了示例代码,用于演示如何在OpenGL中应用这些基本变换。这些代码通常会包括设置顶点、初始化矩阵、定义变换函数以及在主循环中调用这些函数的步骤。源码可能使用旧的固定...

    图片的缩放平移

    2. **矩阵操作**:在Android中,图片的变换(如缩放和平移)通常通过`Matrix`对象来实现。`ZoomImageView`维护了一个`Matrix`,并根据手势更新该矩阵,然后将矩阵应用到`Bitmap`上,实现视觉上的缩放和平移效果。 3...

    计算机图形学实验代码(包括图形旋转、图形平移、图形缩放)

    在这个特定的实验中,我们关注的是三个核心概念:图形旋转、图形平移和图形缩放,这些都是计算机图形学中基本的几何变换操作。 首先,图形旋转是改变图形在二维或三维空间中的角度位置。在计算机图形学中,这通常...

    图形变换平移旋转缩放

    本文将深入探讨如何使用MFC(Microsoft Foundation Classes)库来实现图形的平移、旋转和缩放功能,这些功能是通过矩阵运算来实现的。 首先,我们来看平移操作。平移是指在保持物体形状不变的情况下,将其沿X、Y或Z...

    手势控制旋转、平移、缩放

    在Android开发中,手势控制是用户交互的重要组成部分,特别是在图像视图(ImageView)上实现手势操作,如旋转、平移和缩放,可以极大地提升用户体验。`TouchImageView` 是一个自定义视图,它扩展了Android原生的`...

    android手势处理图片平移、缩放和旋转

    "android手势处理图片平移、缩放和旋转"这个主题涉及到的主要知识点包括Android手势检测、ImageView的扩展以及图片操作。 首先,我们要了解Android的手势检测。Android系统提供了一套GestureDetector和...

    Android使用Matrix实现图片缩放,移动

    Matrix是Android图形库中的核心类,用于表示2D变换矩阵,它可以执行平移(translation)、旋转(rotation)、缩放(scaling)等多种操作。在图片处理场景中,我们通常使用Matrix来改变Bitmap对象的显示效果。 1. **...

    C++矩阵变换操作平移、旋转、镜像

    这里我们主要探讨的是C++中如何实现矩阵变换,包括平移、旋转和镜像操作,这些概念在MFC(Microsoft Foundation Classes)、osg(OpenSceneGraph)和OpenGL等库中都有广泛的应用。 首先,我们要理解矩阵的基础知识...

    Android 图片平移、旋转、缩放demo源码

    这个"Android 图片平移、旋转、缩放demo源码"提供了实现这些功能的示例代码,可以帮助开发者理解和实现类似的交互效果。 首先,我们来探讨图片平移(Translation)的概念。在Android中,我们可以使用`...

    将平移旋转缩放手势映射到Matrix4对象的手势检测.zip

    "将平移旋转缩放手势映射到Matrix4对象的手势检测"的主题聚焦于如何处理和利用这些手势来改变三维空间中的对象,比如在3D场景中进行平移(translation)、旋转(rotation)和缩放(scaling)。Matrix4对象通常用于...

    Android中实现图片平移、缩放、旋转同步进行 源码

    总之,`RotateZoomImageView`是一个实现图片平移、缩放和旋转同步的自定义视图,它通过处理触摸事件并应用相应的变换矩阵来实现这些操作。理解和实现这样的功能对于Android开发者来说,是提升用户体验和增强应用互动...

    Android开发之图片旋转功能实现方法【基于Matrix】

    Matrix ,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。Matrix没有机构体,它必须初始化,然后通过reset方法和set方法来实现。 首先介绍一下矩阵运算。加法和减法就...

    opencv图像的基本处理【平移,旋转,缩放】

    本篇文章将深入探讨如何使用OpenCV实现图像的平移、旋转和缩放等基本操作。这些操作在图像分析、计算机视觉、机器学习等领域都有广泛应用。 首先,我们来看图像的平移。在OpenCV中,图像的平移可以通过`cv2....

    通过矩阵的基本运算实现图像的平移、旋转和缩放.rar

    在图像处理领域,矩阵运算是一种基础且强大的工具,可以用于实现图像的各种变换,如平移、旋转和缩放。在MATLAB中,虽然有内置的函数可以直接进行这些操作,但理解并利用矩阵运算来实现这些变换能让我们更深入地了解...

    hammer.js对svg平移,缩放demo

    在本文中,我们将深入探讨如何使用`hammer.js`库来实现SVG元素的平移和缩放功能。`hammer.js`是一个强大的触摸事件处理库,它为JavaScript提供了丰富的手势支持,如拖动、旋转、捏合等。在这个"hammer.js对svg平移,...

Global site tag (gtag.js) - Google Analytics