`

ImageView自由移动

 
阅读更多

第一种:根据点击位置确定图片的左上角

 

@SuppressWarnings("deprecation")
public class MoveImage extends Activity {
	
	private ImageView mImageView01;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
        getWindow().setFlags(
        		WindowManager.LayoutParams.FLAG_FULLSCREEN,
        		WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.move_image);
		mImageView01 = (ImageView) findViewById(R.id.imageView1);
		mImageView01.setImageResource(R.drawable.img1);
	}

	public boolean onTouchEvent(MotionEvent event) {
		float x = event.getX();
		float y = event.getY();
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			picMove(mImageView01, x, y);
			break;
		case MotionEvent.ACTION_MOVE:
			picMove(mImageView01, x, y);
			break;
		case MotionEvent.ACTION_UP:
			picMove(mImageView01, x, y);
			break;
		}
		return super.onTouchEvent(event);
	}
	
	
	private void picMove(ImageView image, float x, float y) {
		float positionX = x, positionY = y;
		
		image.setDrawingCacheEnabled(true);
		Bitmap bmp = Bitmap.createBitmap(image.getDrawingCache());
		image.setDrawingCacheEnabled(false);
		int intHeight = bmp.getHeight();
		int intWidth = bmp.getWidth();
		
		DisplayMetrics dm = new DisplayMetrics();
	    getWindowManager().getDefaultDisplay().getMetrics(dm); /* 取得屏幕解析像素 */
	    int intScreenX = dm.widthPixels;
	    int intScreenY = dm.heightPixels;
	    
	    if(x >= ( intScreenX - intWidth ) && y <= ( intScreenY - intHeight )){
	    	positionX = intScreenX - intWidth;
	    }
	    else if(x <= ( intScreenX - intWidth ) && y >= ( intScreenY - intHeight )){
	    	positionY = intScreenY - intHeight;
	    }
	    else if(x > ( intScreenX - intWidth ) && y > ( intScreenY - intHeight )){
	    	positionX = intScreenX - intWidth;
	    	positionY = intScreenY - intHeight;
	    }
	    
		image.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,
				intHeight, (int) positionX, (int) positionY));
	}

}

 注意:layout的xml文件的imageView必须包含在AbsoluteLayout中


 

第二种:根据点击位置确定图片的中心位置

@SuppressWarnings("deprecation")
public class MoveImage2 extends Activity {
	
	private ImageView mImageView01;

	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.requestWindowFeature(Window.FEATURE_NO_TITLE); 
        getWindow().setFlags(
        		WindowManager.LayoutParams.FLAG_FULLSCREEN,
        		WindowManager.LayoutParams.FLAG_FULLSCREEN);
		setContentView(R.layout.move_image);
		mImageView01 = (ImageView) findViewById(R.id.imageView1);
		mImageView01.setImageResource(R.drawable.img1);
	}

	public boolean onTouchEvent(MotionEvent event) {
		float x = event.getX();
		float y = event.getY();
		switch (event.getAction()) {
		case MotionEvent.ACTION_DOWN:
			picMove(mImageView01, x, y);
			break;
		case MotionEvent.ACTION_MOVE:
			picMove(mImageView01, x, y);
			break;
		case MotionEvent.ACTION_UP:
			picMove(mImageView01, x, y);
			break;
		}
		return super.onTouchEvent(event);
	}
	
	
	private void picMove(ImageView image, float x, float y) {
		
		image.setDrawingCacheEnabled(true);
		Bitmap bmp = Bitmap.createBitmap(image.getDrawingCache());
		image.setDrawingCacheEnabled(false);
		int intHeight = bmp.getHeight();
		int intWidth = bmp.getWidth();
		
		float positionX = x - intWidth/2, positionY = y - intHeight/2;
		
		DisplayMetrics dm = new DisplayMetrics();
	    getWindowManager().getDefaultDisplay().getMetrics(dm); /* 取得屏幕解析像素 */
	    int intScreenX = dm.widthPixels;
	    int intScreenY = dm.heightPixels;
	    
	    if(x <= (intWidth / 2) && y <= (intHeight / 2)){
	    	positionX = 0;
	    	positionY = 0;
	    }
	    else if(x <= (intWidth / 2) && y >= (intScreenY - intHeight / 2)){
	    	positionX = 0;
	    	positionY = intScreenY - intHeight;
	    }
	    else if(x >= (intScreenX - intWidth / 2) &&  y <= (intHeight / 2)){
	    	positionX = intScreenX - intWidth;
	    	positionY = 0;
	    }
	    else if(x >= (intScreenX - intWidth / 2) &&  y >= (intScreenY - intHeight / 2)){
	    	positionX = intScreenX - intWidth;
	    	positionY = intScreenY - intHeight;
	    }
	    else if(x <= (intScreenX - intWidth / 2) && x >= (intWidth / 2) && y <= (intHeight / 2)){
	    	positionY = 0;
	    }
	    else if(x <= (intScreenX - intWidth / 2) && x >= (intWidth / 2) && y >= (intScreenY - intHeight / 2)){
	    	positionY = intScreenY - intHeight;
	    }
	    else if(x <= (intWidth / 2) && y <= (intScreenY - intHeight / 2) && y >= (intHeight / 2)){
	    	positionX = 0;
	    }
	    else if(x >= (intScreenX - intWidth / 2) && y <= (intScreenY - intHeight / 2) && y >= (intHeight / 2)){
	    	positionX = intScreenX - intWidth;
	    }
	    
		image.setLayoutParams(new AbsoluteLayout.LayoutParams(intWidth,
				intHeight, (int) positionX, (int) positionY));
	}

}
 


  • 大小: 49.8 KB
  • 大小: 49.4 KB
分享到:
评论

相关推荐

    手势控制ImageView缩放移动3(3)

    在Android开发中,手势控制是用户界面交互的重要组成部分,特别是在图像视图(ImageView)的处理上,手势控制能够实现图片的缩放和移动,提供更加丰富的用户体验。本篇将详细探讨如何实现标题“手势控制ImageView...

    android imageview 多点触碰(Multitouch)实现图片拖拽移动缩放

    通过以上步骤,我们就能够为Android的ImageView添加多点触碰功能,使用户可以自由地拖拽和缩放图片。在实际开发中,可以根据具体需求进行调整和优化,例如添加手势识别库如GestureDetector或ScaleGestureDetector来...

    爽直控制ImageView缩放移动2(3)

    在Android开发中,手势识别是实现用户交互的重要一环,特别是在UI组件的动态操作上,如ImageView的缩放和移动。本教程将深入探讨如何通过手势控制ImageView的这些功能,以便提升用户的使用体验。 首先,我们需要...

    Android ImageView 拖拽实例

    而实现ImageView的拖拽功能,可以增强用户体验,使得用户能自由调整图像的位置,这在某些场景下非常有用,比如自定义布局或者交互式图像查看应用。 在“Android ImageView 拖拽实例”中,我们主要关注的是如何赋予...

    自定义ImageView使用实例

    自定义ImageView 封装(jar): 图片放大缩小,自由移动等实例

    手势缩放和移动ImageView

    通过以上步骤,我们可以实现用户通过手势自由缩放和移动ImageView的功能,从而提供更加直观和自然的交互体验。在实际项目中,还可以结合SmoothZoom动画或其他视觉效果,使操作更加流畅。在GestureDemo这个项目中,你...

    移动View,可以拖动到屏幕的任意位置(内含ImageView,VideoView,BaseView,其他自行改造)

    最后,为了更好地支持拖动,可能需要对布局进行适当的调整,确保View可以在父布局中自由移动。例如,使用`android:layout_gravity="center"`将View居中,然后通过移动来改变位置,而不是直接设置具体的坐标。 总的...

    基于ImageView的多点触控,双击放大缩小以及结合ViewPager的事件冲突

    然而,对于一些高级功能,如多点触控、双击缩放和自由移动,原生的ImageView往往无法满足需求。本篇文章将深入探讨如何通过自定义控件ZoomImageView实现这些功能,并在结合ViewPager时处理可能的事件冲突。 首先,...

    Android-可拖动可放大缩放的ImageView

    在Android开发中,有时我们需要创建一个用户可以自由拖动、缩放甚至旋转的ImageView,以提供更加丰富的交互体验。这个自定义的`DragZoom ImageView`就是为此目的设计的。在这个组件中,我们主要关注三个核心功能:...

    打造个性的图片预览与多点触控(自由移动,自由缩放,双击放大缩小)

    这通常涉及到自定义控件,以便实现图片的自由移动、自由缩放以及多点触控操作,比如双击放大缩小。本教程将深入探讨如何实现这样一个功能强大的图片查看器。 首先,我们需要创建一个自定义的ImageView子类,我们...

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

    - **旋转**:为了实现旋转,我们需要记录初始的旋转角度,然后在每次手指移动时计算新的旋转角度,通过`postRotate()`方法更新ImageView的Matrix。 - **平移**:平移操作可以通过改变Matrix的translationX和...

    javaFX 图片放大缩小移动

    总的来说,这个JavaFX项目提供了一种实现图片在用户界面中自由放大、缩小和移动的方法。通过学习和理解这个示例,开发者可以更好地掌握JavaFX中图片操作的技巧,这对于开发富媒体应用或者图形编辑工具非常有帮助。

    Android可拖动缩放的ImageView DEMO

    `matrix`模式允许自定义矩阵变换,这意味着我们可以自由地对图像进行平移、缩放等操作,非常适合实现拖动和缩放的功能。 接下来,我们来创建一个自定义的`DraggableImageView`类,这个类继承自`ImageView`,并添加`...

    自定义ImageView实现多点触控源码

    本教程将深入探讨如何创建一个自定义的ImageView,实现多点触控功能,以支持图片的自由移动和缩放,同时解决与ViewPager的兼容性问题。 首先,我们需要了解多点触控的基本原理。在Android中,多点触控是通过`...

    ImageView使用效果.rar

    - 滑动切换:通过`TranslateAnimation`实现图像的平滑移动,常用于轮播图。 5. 图片裁剪: - 使用`Bitmap.createBitmap()`方法,配合Matrix对图片进行裁剪。 - 第三方库CropImage提供更高级的裁剪功能,包括自由...

    自定义缩放ImageView

    然而,标准的ImageView往往无法满足开发者对于图片缩放的特定需求,例如自由调整缩放的最大和最小比例。这时,自定义一个可缩放的ImageView就显得尤为重要。这个自定义的组件通常被称为“自定义缩放ImageView”。 ...

    WindowManager实现悬浮窗口&可自由移动的悬浮窗口

    在Android开发中,实现一个可自由移动的悬浮窗口通常涉及到`WindowManager`服务的使用。`WindowManager`是Android系统提供的一个接口,允许应用程序在窗口管理器中添加、删除或配置视图。在这个主题中,我们将深入...

    Android 图片移动

    这个"Android 图片移动"的功能,主要是让用户能够通过触摸屏幕,拖动图片在界面上自由移动,实现一种交互式的用户体验。以下是一些关于实现这一功能的关键知识点: 1. **ImageView**: 图片显示的基本组件是`...

    Android-Android可自由移动放大缩小的图片控件ScaleView

    1. **平移(Panning)功能**:用户可以通过手指拖动来改变图片的位置,实现图片在屏幕上的自由移动。这通常涉及到手势识别,需要监听并处理MotionEvent事件,尤其是ACTION_DOWN、ACTION_MOVE和ACTION_UP等事件。 2. *...

    Android ImageView控件缩放和旋转图片源码.zip源码资源下载

    Xamarin是一个使用C#和.NET框架开发原生移动应用的工具,它允许开发者用相同的编程语言和API来开发iOS、Android和Windows应用。 至于Apache,这可能指的是Apache License 2.0,源码可能采用了这个开源许可协议,...

Global site tag (gtag.js) - Google Analytics