`
everlxq
  • 浏览: 110893 次
  • 性别: Icon_minigender_1
  • 来自: 青岛
社区版块
存档分类
最新评论

android 图片之多点触控放大缩小

 
阅读更多

Activity:
package com.bocom;

import android.app.Activity;
import android.content.pm.ActivityInfo;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.graphics.PointF;
import android.os.Bundle;
import android.util.FloatMath;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;

public class MainActivityImage extends Activity implements OnTouchListener {

	private ImageView imgview;
	private ImageView img;

	private Matrix matrix = new Matrix();
	private Matrix savedMatrix = new Matrix();

	static final int NONE = 0;
	static final int DRAG = 1;
	static final int ZOOM = 2;
	int mode = NONE;

	// Remember some things for zooming
	PointF start = new PointF();
	PointF mid = new PointF();
	float oldDist = 1f;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		setContentView(R.layout.activity_main_activity_image);
		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
		imgview = (ImageView) this.findViewById(R.id.imag1);
		// imgview.setAnimation(AnimationUtils.loadAnimation(this,
		// R.anim.newanim));

//		img = (ImageView) this.findViewById(R.id.imag);
//		Matrix mt = img.getImageMatrix();
//		// mt.postRotate(30);
//		mt.postScale(0.5f, 0.5f);
//		mt.postScale(1.5f, 1.5f);
//		mt.postRotate(30, 130, 100);
//		mt.postTranslate(100, 10);
//
//		img.setImageMatrix(mt);

		// imgview.setLongClickable(true);
		String v=getIntent().getStringExtra("iv");
		if("1".equals(v))
		imgview.setImageBitmap(BitmapFactory.decodeResource(
				this.getResources(), R.drawable.i1_1));
		if("2".equals(v))
		imgview.setImageBitmap(BitmapFactory.decodeResource(
				this.getResources(), R.drawable.i1_2));
		
		imgview.setOnTouchListener(this);
		imgview.setLongClickable(true);

	}

	private float spacing(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);
	}

	private void midPoint(PointF point, MotionEvent event) {
		float x = event.getX(0) + event.getX(1);
		float y = event.getY(0) + event.getY(1);
		point.set(x / 2, y / 2);
	}

	@Override
	public boolean onTouch(View v, MotionEvent event) {
		// TODO Auto-generated method stub
		/*
		 * Log.d("Infor", "类别:"+event.getAction()); Log.d("Infor",
		 * "mask:"+event.getActionMasked()); Log.d("Infor",
		 * "index:"+event.getActionIndex()); Log.d("Infor",
		 * "points:"+event.getPointerCount());
		 */
		ScaleType type=ScaleType.MATRIX;
		imgview.setScaleType(type);
		Log.d("Infor", "size:" + event.getSize());
		if (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP)
			Log.d("Infor", "多点操作");
		switch (event.getActionMasked()) {
		case MotionEvent.ACTION_DOWN:
			matrix.set(imgview.getImageMatrix());
			savedMatrix.set(matrix);
			start.set(event.getX(), event.getY());
			Log.d("Infor", "触摸了...");
			mode = DRAG;
			break;
		case MotionEvent.ACTION_POINTER_DOWN: // 多点触控
			oldDist = this.spacing(event);
			if (oldDist > 10f) {
				Log.d("Infor", "oldDist" + oldDist);
				savedMatrix.set(matrix);
				midPoint(mid, event);
				mode = ZOOM;
			}
			break;
		case MotionEvent.ACTION_POINTER_UP:
			mode = NONE;
			break;
		case MotionEvent.ACTION_MOVE:
			if (mode == DRAG) { // 此实现图片的拖动功能...
				matrix.set(savedMatrix);
				matrix.postTranslate(event.getX() - start.x, event.getY()
						- start.y);
			} else if (mode == ZOOM) {// 此实现图片的缩放功能...
				float newDist = spacing(event);
				if (newDist > 10) {
					matrix.set(savedMatrix);
					float scale = newDist / oldDist;
					matrix.postScale(scale, scale, mid.x, mid.y);
				}
			}
			break;
		}
		imgview.setImageMatrix(matrix);
		return false;
	}

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



xml:
<?xml version="1.0" encoding="UTF-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
    android:id="@+id/linearLayout1" 
    >
        <ImageView 
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imag1"
        android:scaleType="center"
        ></ImageView>
   </RelativeLayout>



Manifast,colors.xml,styles.xml:
<activity
            android:name=".MainActivityImage"
            android:theme="@style/Transparent" 
            android:label="@string/title_activity_main_activity_image" >
        </activity>

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="transparent">#9000</color>
</resources>

<style  name="Transparent"> 
  		<item name="android:windowBackground">@color/transparent</item> 
  		<item name ="android:windowIsTranslucent">true</item> 
  		<item  name="android:windowAnimationStyle">@+android:style/Animation.Translucent</item> 
  </style> 

分享到:
评论

相关推荐

    photoView图片多点触控放大缩小

    在Android开发中,图片展示是常见的需求之一,而如何实现图片的多点触控放大缩小功能则是一项重要的技术。在给定的标题“photoView图片多点触控放大缩小”中,我们关注的是一个名为`photoView`的组件,它是专门为...

    android多点触控放大缩小图片demo

    本教程将基于提供的"android多点触控放大缩小图片demo"来深入讲解如何实现这一功能。 首先,我们要理解多点触控的基本原理。Android系统支持同时检测多个触摸事件,通过`MotionEvent`类来处理这些事件。当用户同时...

    Android多点触控放大缩小图片

    通过以上步骤和示例代码,你可以实现Android应用中的多点触控图片放大缩小功能。在实际开发中,可能还需要考虑性能优化、手势冲突等问题,但基本思路就是这些。记得在实现过程中不断测试和调整,以提供最佳的用户...

    surfaceview 多点触控移动放大缩小

    综上所述,实现SurfaceView的多点触控移动放大缩小涉及到了Android的触摸事件处理、矩阵变换、多线程编程等多个知识点。通过理解并熟练运用这些技术,可以为用户提供流畅且响应迅速的交互体验。在实际开发中,可以...

    安卓Android源码——多点触控实例源码.zip

    多点触控(Multi-Touch)是指设备能够同时识别并处理两个或更多个触控点的能力,比如两个手指的滑动、捏合放大缩小等手势。在Android系统中,这种功能是通过`MotionEvent`类来实现的,它提供了处理触摸事件的方法,...

    android ui经常要用到的组件,一个是左右划屏,一个是多点触控放大缩小图片

    在Android UI设计中,开发者经常会遇到两种关键的交互体验需求:左右划屏切换页面和多点触控放大缩小图片。这两个功能极大地提升了用户体验,使得应用更加直观和易用。接下来,我们将深入探讨这两种组件的实现原理及...

    android 图片多点放大缩小移动

    本文将深入探讨如何实现“Android图片多点放大缩小移动”这一功能,结合给定的描述和标签,我们将关注以下几个核心知识点: 1. **多点触控(Multi-Touch)**: 多点触控是指设备能够同时识别并处理两个或更多触摸...

    安卓QQ相关相关-Android高仿qq发送图片中编辑图片功能支持图片涂鸦擦除改变画笔颜色和粗细;多点触控放大缩小移动;代码注释清除扩展性强.rar

    Android高仿qq发送图片中编辑图片功能,支持图片涂鸦、擦除、改变画笔颜色和...多点触控放大缩小、移动;代码注释清除,扩展性强.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。

    android图片多点触碰放大缩小.pdf

    在提供的文件"android图片多点触碰放大缩小.pdf"中,展示了一个名为`ImageZoomActivity`的Activity,它实现了对图片进行触摸拖动和双指缩放的操作。以下是对该实现的详细解释: 首先,类`ImageZoomActivity`继承自`...

    多点触控 图片的缩放

    在实现多点触控缩放和图片浏览时,需要注意性能优化,如使用高效的图片解码库(如 Glide 或 Picasso for Android,SDWebImage for iOS),避免一次性加载所有图片,以及使用懒加载策略等。 总结: 多点触控图片缩放...

    Android中使用拖拉与多点触控功能实现图片的拖拉与缩放功能案例

    在Android应用开发中,用户交互体验是至关重要的,而拖拉(Drag & Drop)和多点触控(Multi-Touch)功能则极大地丰富了这一体验。本案例将深入讲解如何在Android环境中实现在图片上应用这两种功能,允许用户对图片进行...

    flex 多点触控组件,可实现图片放大缩小旋转

    flash,多点触控开发 经过自己优化,基于BorderContainer,只要往里面的image里面放入图片即可实现多点触控的旋转放大缩小灯操作。

    Android代码-多点触控实例源码.zip

    通过学习和研究这个多点触控实例源码,你将能够理解Android多点触控的工作原理,以及如何在实际项目中实现和优化这类功能。这将有助于提升你的Android开发技能,并使你的应用更具交互性和吸引力。

    Android手势识别-多点触控

    在Android平台上,手势识别与多点触控是移动应用开发中的关键组成部分,它们极大地提升了用户交互体验。Android系统提供了一套强大的API,使得开发者能够轻松地处理和解析用户的触摸事件,进而实现各种复杂的手势...

    Android 多点触控实例--图片的缩放

    本文将深入探讨如何在Android应用程序中实现图片的多点触控缩放功能。我们将讨论以下几个关键知识点: 1. **手势检测**: 在Android中,多点触控依赖于手势检测。我们可以通过监听MotionEvent事件来捕获用户的触摸...

    Android高级应用源码-多点触控控制字体大小,源码中有详细注释,简单Demo.zip

    总的来说,这个Demo涵盖了Android多点触控事件的处理和UI动态更新,对于开发者来说,这是一个很好的学习实例,可以帮助他们理解如何在实际应用中实现类似的功能。通过研究源码,开发者不仅可以掌握多点触控的基本...

    双击图片放大缩小及多点触控

    当我们需要实现更复杂的交互,比如双击图片放大缩小以及多点触控操作时,通常需要对默认的`ImageView`进行扩展或使用第三方库来实现。在这个场景中,我们关注的是如何通过自定义`ImageView`实现双击放大缩小以及多点...

    Android 多点触控实现

    要实现Android多点触控,我们需要理解触摸事件的处理机制以及如何在代码中应用。 首先,Android的多点触控功能自API Level 8(即Android 2.0)开始引入。在较低版本的Android系统中,可能不支持多点触控。为了确保...

    Android多点触控实现对图片放大缩小平移,惯性滑动等功能

    主要介绍了Android多点触控实现对图片放大缩小平移,惯性滑动等功能的相关资料,需要的朋友可以参考下

    多图片预览功能以及图片多点触控(缩放,双击,拖动)

    在IT领域,尤其是在移动应用开发中,多图片预览功能及图片多点触控是常见的需求,这使得用户能够互动地查看和操作图像。本文将深入探讨如何实现这些功能,包括图片自由缩放、双击缩放、图片自由移动以及与ViewPager...

Global site tag (gtag.js) - Google Analytics