`

Matrix放大、缩小和旋转图片

 
阅读更多

一、放大、缩小图片

 

private LinearLayout imageLayout;
	private ImageView imageView;
	private Button bt_big;
	private Button bt_small;

	private float scaleWidth = 1;
	private float scaleHeight = 1;
	private int id = 0;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.big_small);

		imageLayout = (LinearLayout) findViewById(R.id.imageLayout);
		imageView = (ImageView) findViewById(R.id.imageView1);
		bt_big = (Button) findViewById(R.id.button1);
		bt_small = (Button) findViewById(R.id.button2);

		bt_big.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				big(imageView);
			}
		});
		
		bt_small.setOnClickListener(new Button.OnClickListener() {
			public void onClick(View v) {
				small(imageView);
			}
		});
	}

	/* 图片放大的method */
	private void big(ImageView mImageView) {
		// ImageView对象(iv_photo)必须做如下设置后,才能获取其中的图像
		mImageView.setDrawingCacheEnabled(true);
		// 获取ImageView中的图像
		Bitmap bmp = Bitmap.createBitmap(mImageView.getDrawingCache());
		// 从ImaggeView对象(iv_photo)中获取图像后,要记得调用setDrawingCacheEnabled(false)
		// 清空画图缓冲区
		mImageView.setDrawingCacheEnabled(false);
		int bmpWidth = bmp.getWidth();
		int bmpHeight = bmp.getHeight();
		/* 设定图片放大的比例 */
		double scale = 1.25;
		/* 计算这次要放大的比例 */
		scaleWidth = (float) (scaleWidth * scale);
		scaleHeight = (float) (scaleHeight * scale);

		/* 产生reSize后的Bitmap对象 */
		Matrix matrix = new Matrix();
		matrix.postScale(scaleWidth, scaleHeight);
		Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,
				matrix, true);
		
		if(id == 0){
			imageLayout.removeView(mImageView);
		}
		else{
			imageLayout.removeView((ImageView)findViewById(id));
		}
		id = id + 1;
		ImageView imageView = new ImageView(BigAndSmall.this);
		imageView.setId(id);
		imageView.setImageBitmap(resizeBmp);
		imageLayout.addView(imageView);
	}
	
	/* 图片缩小的method */
	private void small(ImageView mImageView) {
		// ImageView对象(iv_photo)必须做如下设置后,才能获取其中的图像
		mImageView.setDrawingCacheEnabled(true);
		// 获取ImageView中的图像
		Bitmap bmp = Bitmap.createBitmap(mImageView.getDrawingCache());
		// 从ImaggeView对象(iv_photo)中获取图像后,要记得调用setDrawingCacheEnabled(false)
		// 清空画图缓冲区
		mImageView.setDrawingCacheEnabled(false);
		int bmpWidth = bmp.getWidth();
		int bmpHeight = bmp.getHeight();
		/* 设定图片放大的比例 */
		double scale = 0.8;
		/* 计算这次要放大的比例 */
		scaleWidth = (float) (scaleWidth * scale);
		scaleHeight = (float) (scaleHeight * scale);

		/* 产生reSize后的Bitmap对象 */
		Matrix matrix = new Matrix();
		matrix.postScale(scaleWidth, scaleHeight);
		Bitmap resizeBmp = Bitmap.createBitmap(bmp, 0, 0, bmpWidth, bmpHeight,
				matrix, true);
		
		if(id == 0){
			imageLayout.removeView(mImageView);
		}
		else{
			imageLayout.removeView((ImageView)findViewById(id));
		}
		id = id + 1;
		ImageView imageView = new ImageView(BigAndSmall.this);
		imageView.setId(id);
		imageView.setImageBitmap(resizeBmp);
		imageLayout.addView(imageView);
	}

 big_small.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent"
	android:orientation="vertical">
	<LinearLayout
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:id="@+id/imageLayout">
		<ImageView
			android:layout_width="wrap_content"
			android:src="@drawable/img2"
			android:layout_height="wrap_content"
			android:id="@+id/imageView1"></ImageView>
	</LinearLayout>
	<Button
		android:text="放大"
		android:id="@+id/button1"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"></Button>
	<Button
		android:text="缩小"
		android:id="@+id/button2"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content"></Button>
</LinearLayout>
 


 

 

二、旋转图片

 

	private ImageView imageView;
	private Button bt_left;
	private Button bt_right;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.rotate);
		
		imageView = (ImageView) findViewById(R.id.imageView1);
		bt_left = (Button) findViewById(R.id.button1);
		bt_right = (Button) findViewById(R.id.button2);
		
		bt_left.setOnClickListener(new OnClickListener(){

			public void onClick(View v) {
				rotate(imageView , 90);
			}
			
		});
		
		bt_right.setOnClickListener(new OnClickListener(){

			public void onClick(View v) {
				rotate(imageView , -90);
			}
			
		});
		
		
	}

	public void rotate(ImageView imageView, int scaleAngle) {
		Bitmap bitmap = getBitmapFromImage(imageView);
		int widthOrig = bitmap.getWidth();
		int heightOrig = bitmap.getHeight();
		/* ScaleTimes=1,维持1:1的宽高比例 */
		int scaleTimes = 1;
		int newWidth = widthOrig * scaleTimes;
		int newHeight = heightOrig * scaleTimes;
		/* 计算旋转的Matrix比例 */
		float scaleWidth = ((float) newWidth) / widthOrig;
		float scaleHeight = ((float) newHeight) / heightOrig;
		Matrix matrix = new Matrix();
		/* 使用Matrix.postScale设定维度 */
		matrix.postScale(scaleWidth, scaleHeight);
		/* 使用Matrix.postRotate方法旋转Bitmap */
		// matrix.postRotate(5*ScaleAngle);
		matrix.setRotate(5 * scaleAngle);
		/* 建立新的Bitmap对象 */
		Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, widthOrig,
				heightOrig, matrix, true);
		BitmapDrawable myNewBitmapDrawable = new BitmapDrawable(resizedBitmap);
		imageView.setImageDrawable(myNewBitmapDrawable);
	}

	public Bitmap getBitmapFromImage(ImageView mImageView) {
		// ImageView对象(iv_photo)必须做如下设置后,才能获取其中的图像
		mImageView.setDrawingCacheEnabled(true);
		// 获取ImageView中的图像
		Bitmap bmp = Bitmap.createBitmap(mImageView.getDrawingCache());
		// 从ImaggeView对象(iv_photo)中获取图像后,要记得调用setDrawingCacheEnabled(false)
		// 清空画图缓冲区
		mImageView.setDrawingCacheEnabled(false);
		return bmp;
	}
 



 

  • 大小: 36.2 KB
  • 大小: 17.8 KB
  • 大小: 26.4 KB
  • 大小: 26.5 KB
分享到:
评论

相关推荐

    安卓图片的放大缩小及旋转

    总结一下,Android图片的放大缩小及旋转涉及到`ImageView`的使用、手势识别、`Matrix`变换以及图片的加载与内存管理。理解并掌握这些知识点,能够帮助开发者在Android应用中实现丰富的图片交互功能。在实际操作中,...

    android应用源码图片放大缩小旋转涂鸦源码.zip

    这份"android应用源码图片放大缩小旋转涂鸦源码.zip"提供了完整的源代码,可以作为学习和设计此类应用的参考。以下是基于这个源码包可能涉及到的关键知识点: 1. **图片加载库**:在Android中,高效地加载和显示...

    解决Android 图片放大、缩小、旋转等问题

    要旋转图片,我们先创建一个Matrix对象,然后调用其`setRotate()`方法设置旋转角度,最后使用`Bitmap.createBitmap()`结合Matrix完成旋转操作。注意,旋转可能会导致图片边缘被裁剪,因此在实际应用中可能需要调整...

    Android图片放大缩小旋转完美demo

    本文将基于标题"Android图片放大缩小旋转完美demo"和描述,深入探讨Android中如何实现图片的触摸缩放、旋转以及在网络环境下的加载,同时会提及到使用ViewPager展示图片的功能。 首先,Android提供了一些基本的图像...

    flex对图片打开,剪切,放大缩小,旋转

    5. **旋转图片**: `rotation`属性用于设置对象的旋转角度,单位为度。例如: ```actionscript imageSprite.rotation = 90; // 逆时针旋转90度 ``` 使用`Matrix`对象,可以更精确地控制旋转、缩放和位移。 6. ...

    android 图片放大缩小滑动

    在图片放大缩小中,我们需要改变`ImageView`的`Matrix`属性来实现图片的动态调整。当用户执行缩放手势时,我们根据`ScaleGestureDetector`提供的比例因子更新`Matrix`。 4. **OnTouchListener与GestureListener**: ...

    Android实现图片放大缩小Demo

    在Android开发中,实现图片的放大缩小功能是常见的需求,特别是在设计相册或者查看图片的应用中。本Demo主要展示了如何在Android环境中实现这样的功能,既支持网络图片的加载,也支持本地图片的显示,并允许用户进行...

    双击放大缩小图片双击放大缩小图片

    标题"双击放大缩小图片"和描述所提及的是一个专门处理这一功能的View工具类。下面将详细阐述实现这个功能的关键知识点。 1. **自定义View**: 在Android中,为了实现特定的UI效果,我们常常需要创建自定义View。这是...

    android 自定义imageview(手势放大,缩小,旋转)

    总结,通过以上步骤,我们可以创建一个支持手势操作的自定义ImageView,实现图片的自由放大、缩小和旋转。在实际项目中,这样的自定义控件可以带来更加丰富的用户交互,提升应用的可玩性和实用性。在理解了手势检测...

    android图片放大缩小 ImageView

    9. **动画效果**: 除了静态的放大缩小,还可以通过Animation类或ObjectAnimator实现平滑的缩放动画效果,增强用户体验。 10. **性能考量**: 当处理大量图片或高分辨率图片时,要注意内存管理,合理使用Bitmap的配置...

    安卓编程实现图片的放大缩小旋转及镜像

    以上就是安卓编程中实现图片放大、缩小、旋转及镜像的基本流程和技术点。在实际开发中,可以根据具体需求进行调整和优化。通过这种方式,用户可以直观地在屏幕上通过手势操作图片,增强应用的交互性和趣味性。

    android 显示网络图片并放大缩小

    在Android开发中,显示网络图片并实现其放大缩小以及单点移动和多点触摸功能是一项常见的需求。这通常涉及到网络编程、图片加载库的使用、手势识别和图像处理等多个技术领域。以下是对这些知识点的详细解释: 1. **...

    android 图片双击放大缩小

    开源项目可能还包含了对单指拖动、两指捏合等手势的支持,这些手势可以用来平移图片和自由缩放。通过`ScaleGestureDetector`可以方便地检测到两指捏合的手势,进而调整图片的缩放比例。 5. **性能优化**: 在处理...

    Android图片随手势放大缩小

    在Android开发中,实现图片随手势放大缩小的功能是一项常见的需求,尤其在查看照片、阅读电子书或使用图像编辑应用时。这项技术的核心是利用Android提供的触摸事件处理机制和矩阵操作来改变图片的缩放比例。以下将...

    matrix键盘缩放旋转图片

    接下来,我们需要监听键盘输入,根据键盘输入的指令(例如,"+"号代表放大,"-"号代表缩小,"左箭头"代表逆时针旋转,"右箭头"代表顺时针旋转)来调用Matrix的方法进行图像变换。 ```java public void ...

    android 实现图片放大缩小

    `android 实现图片放大缩小`的主题,意味着我们需要探讨如何在应用中实现对图片的缩放和平移功能,这通常涉及自定义ImageView子类来扩展其默认行为。在这个场景中,`DragImageView`就是我们自定义的组件,用于实现这...

    Android 图片显示放大缩小旋转透明切换

    此外,如果需要在用户交互时动态旋转图片,可以在`onTouchEvent`中计算旋转角度并更新`Matrix`。 透明切换则涉及到Android的颜色和Alpha通道。图片的透明度可以通过设置`ImageView`的`alpha`属性来调整,或者直接...

    android 可放大缩小拖动的ImageView

    通过实现`GestureDetector.SimpleOnGestureListener`接口来响应用户的双击、单击等手势动作,从而控制图片的放大、缩小等功能。`GestureDetector`是Android系统提供的用于识别复杂手势的类,可以方便地检测出如滑动...

    图片放大缩小DEMO

    本文将详细讲解如何实现"图片放大缩小DEMO",包括手势识别、图片缩放和平移以及图片裁剪的核心技术。 1. 手势识别: 在Android中,我们可以使用GestureDetector类来识别用户的触摸手势。GestureDetector提供了多种...

    Android图片放大缩小

    以下是关于Android图片放大缩小的关键知识点和实现细节: 1. **ImageView组件**: Android中的`ImageView`是用于显示图像的基本组件。在实现图片缩放功能时,我们通常会用到它。通过设置`ImageView`的`scaleType`...

Global site tag (gtag.js) - Google Analytics