Android小应用----图片的拖动、缩放

public class MainActivity extends Activity {

	private ImageView operImage;
	private PointF point = new PointF();//记录手指的位置
	private PointF midPoint = new PointF();//记录手指间的中点的位置
	private Matrix matrix = new Matrix();//记录拖动和缩放前手指按下的matrix
	private Matrix newMatrix = new Matrix();//记录手指正在拖动和缩放的matrix
	private int type = 0;//操作类型
	private float pointerDistance;//两个手指的距离
	private static final int DRAG = 1;//拖动
	private static final int SCALE = 2;//缩放
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		operImage= (ImageView) findViewById(R.id.before);
		operImage.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View v, MotionEvent event) {
				int action = event.getAction()&MotionEvent.ACTION_MASK;
				switch (action) {
					case MotionEvent.ACTION_DOWN:
						float startX =  event.getX();
						float startY =  event.getY();
						//记录手指的位置
						point.set(startX, startY);
						//得到当前图片的位置
						matrix.set(operImage.getImageMatrix());
						type = DRAG;//拖动
						break;
					case MotionEvent.ACTION_POINTER_1_DOWN:
						//记录图片没有缩放前的大小
						matrix.set(operImage.getImageMatrix());
						//记录两个手指的距离
						pointerDistance = getDistance(event);
						//记录两个手指距离的中点
						midPoint= getMidPoint(event);
						type = SCALE;//缩放
						break;
					case MotionEvent.ACTION_MOVE:
						switch (type) {
							case DRAG://拖动
								float newX =  event.getX();
								float newY =  event.getY();
								newMatrix.set(matrix);
								float dx = newX - point.x;
								float dy = newY - point.y;
								newMatrix.postTranslate(dx, dy);
								break;
							case SCALE://缩放
								newMatrix.set(matrix);
								float nowDistance = getDistance(event);
								//根据此时的两个手指间的距离除以开始的两个手指间的距离计算缩放比
								float scale = nowDistance/pointerDistance;
								//根据中心点进行缩放
								newMatrix.postScale(scale, scale, midPoint.x, midPoint.y);
								break;
							default:
								break;
						}
						break;
					case MotionEvent.ACTION_UP:
						type = 0;
						break;
					case MotionEvent.ACTION_POINTER_1_UP:
						type = 0;
						break;
				}
				operImage.setImageMatrix(newMatrix);
				return true;
			}
		});
	}

	/*
	 * 计算两个手指的中点
	 */
	protected PointF getMidPoint(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);
	}

	/*
	 * 计算两点间的距离
	 */
	protected float getDistance(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);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}

Android小应用----图片的拖动、缩放

时间: 2024-08-25 20:22:45

Android小应用----图片的拖动、缩放的相关文章

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

前言 之前因为项目需求,其中使用到了图片的单击显示取消,图片平移缩放功能,昨天突然想再加上图片的旋转功能,在网上看了很多相关的例子,可是没看到能同时实现我想要的功能的. 需求:(1)图片平移.缩放.旋转等一系列操作后,图片需要自动居中显示.(2)图片旋转后选自动水平显示或者垂直显示(3)图片在放大缩小的同时都能旋转 Demo实现部分效果截图 Demo主要代码 Java 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2

android图片拖动缩放

这篇图片拖拽缩放也是我在项目中用到的,今天整理一下,将源码奉献给大家,希望对大家以后碰到相似的问题有帮助.android 大图片拖拽缩放 这篇就不做过多介绍了,直接上源码: 1 public class SpacePageActivity extends Activity { 2 3 private LinearLayout linnerLayout_spacepage; 4 private RelativeLayout relativeLayout_spacepage; 5 private B

Android实现对图片的缩放、剪切、旋转、存储

Android实现对图片的缩放.剪切.旋转.存储 一.问题描述 在开发中,当我们需要的有一张大图片同时还需要一些小图片时,我们只需要通过代码对此图片进行不同比例的缩放即可,这样大大节约资源,减小了安装包的尺寸 .除缩放外,我们还经常对图片进行其他操作如裁剪.旋转.存储等. 这样我们可以编写对于图片进行处理的通用组件,方便开发.下面就分享一下对图片进行处理的组件BitmapUtil,案例界面: 二.技术点描述 1.通过BitmapFactory取得Bitmap Bitmap bm=BitmapFa

Android 手势检测实战 打造支持缩放平移的图片预览效果(下)

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39480503,本文出自:[张鸿洋的博客] 上一篇已经带大家实现了自由的放大缩小图片,简单介绍了下Matrix:具体请参考:Android 手势检测实战 打造支持缩放平移的图片预览效果(上):本篇继续完善我们的ImageView~~ 首先加入放大后的移动~~ 1.自由的进行移动 我们在onTouchEvent里面,加上移动的代码,当然了,必须长或宽大于屏幕才可以移动~~~ @Ov

微信小程序学习点滴《十二》:图片等比例缩放 获取屏幕尺寸图片尺寸 自适应

原文:http://www.wxapp-union.com/portal.php?mod=view&aid=360 早上在论坛上看到有人写了关于图片等比例缩放的文章,只是判断了图片宽是否大于屏幕宽.我之前在做Android的时候也会遇到图片等比例缩放的问题.应该是用图片宽高比和屏幕宽高比做判断.做个笔记. 老规矩,先上图. 1.图片高宽比小于屏幕高宽比 2.图片高宽比大于屏幕高宽比 3.这种其实也是图片高宽比小于屏幕高宽比,但是高宽都大于屏幕高宽.所以不能简单用高宽来判断,应该是用高宽比判断后做

Android进度条控制图片旋转·平移·缩放·倾斜

初来乍到 平时代码多写于某笔记软件上 现在在这里记录一些 从初学Android开始写起 可能有些地方实现得略小白 或者还不能熟练使用博客园的功能 但是希望能够对需要的人有帮助 不足之处请多指教 一般使用工具:android studio 那么 Here we go. have a good time. 用进度条实现控制图片旋转·平移·缩放·倾斜 效果: 1 public class MainActivity extends AppCompatActivity implements SeekBar

android图片等比例缩放 填充屏幕

用IamgeView的 android:scaleType  设置属性的时候  填充屏幕出现的各种问题 /** * 将图片等比例缩放 setAdjustViewBounds setMaxWidth setMaxWidth必须同时设置才有效 * * @param context * @param view * 父容器 * @param image * 图片控件 * @param source * 图片资源 */ public static void setImageViewMathParent(A

Android实现本地图片选择及预览缩放效果仿春雨医生

在做项目时经常会遇到选择本地图片的需求,以前都是懒得写直接调用系统方法来选择图片,但是这样并不能实现多选效果,最近又遇到了,所以还是写一个demo好了,以后也方便使用.还是首先来看看效果 显示的图片使用RecyclerView实现的,利用Glide来加载:下面弹出的图片文件夹效果是采用PopupWindow实现,这里比采用PopupWindow更方便,弹出显示的左边图片是这个文件夹里的第一张图片:选中的图片可以进行预览,使用网上一个大神写的来实现的:至于图片的获取是用ContentProvide

IOS基础UI之(三)手写UI和storyboard方式实现图片移动和缩放

手写UI是最早进行UI界面布局的方法,优点是灵活自由,缺点是使代码看起来比较长.平时学习的时候可以多尝试手写ui,这样会更深入熟悉控件.storyboard开发效率相对比较高.实际开发中看情况而定!! 下面用这两种方式分别实现图片移动和缩放. 功能描述: 1. 界面布局 2.点击相应的按钮,对显示的图片移动.缩放. 效果如下:    掌握点: 一:熟悉代码的描述UIButton属性 1.UIButton状态 UIControlStateNormal          // 正常状态 UICont