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>
分享到:
相关推荐
在Android开发中,图片展示是常见的需求之一,而如何实现图片的多点触控放大缩小功能则是一项重要的技术。在给定的标题“photoView图片多点触控放大缩小”中,我们关注的是一个名为`photoView`的组件,它是专门为...
本教程将基于提供的"android多点触控放大缩小图片demo"来深入讲解如何实现这一功能。 首先,我们要理解多点触控的基本原理。Android系统支持同时检测多个触摸事件,通过`MotionEvent`类来处理这些事件。当用户同时...
通过以上步骤和示例代码,你可以实现Android应用中的多点触控图片放大缩小功能。在实际开发中,可能还需要考虑性能优化、手势冲突等问题,但基本思路就是这些。记得在实现过程中不断测试和调整,以提供最佳的用户...
综上所述,实现SurfaceView的多点触控移动放大缩小涉及到了Android的触摸事件处理、矩阵变换、多线程编程等多个知识点。通过理解并熟练运用这些技术,可以为用户提供流畅且响应迅速的交互体验。在实际开发中,可以...
多点触控(Multi-Touch)是指设备能够同时识别并处理两个或更多个触控点的能力,比如两个手指的滑动、捏合放大缩小等手势。在Android系统中,这种功能是通过`MotionEvent`类来实现的,它提供了处理触摸事件的方法,...
在Android UI设计中,开发者经常会遇到两种关键的交互体验需求:左右划屏切换页面和多点触控放大缩小图片。这两个功能极大地提升了用户体验,使得应用更加直观和易用。接下来,我们将深入探讨这两种组件的实现原理及...
本文将深入探讨如何实现“Android图片多点放大缩小移动”这一功能,结合给定的描述和标签,我们将关注以下几个核心知识点: 1. **多点触控(Multi-Touch)**: 多点触控是指设备能够同时识别并处理两个或更多触摸...
Android高仿qq发送图片中编辑图片功能,支持图片涂鸦、擦除、改变画笔颜色和...多点触控放大缩小、移动;代码注释清除,扩展性强.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
在提供的文件"android图片多点触碰放大缩小.pdf"中,展示了一个名为`ImageZoomActivity`的Activity,它实现了对图片进行触摸拖动和双指缩放的操作。以下是对该实现的详细解释: 首先,类`ImageZoomActivity`继承自`...
在实现多点触控缩放和图片浏览时,需要注意性能优化,如使用高效的图片解码库(如 Glide 或 Picasso for Android,SDWebImage for iOS),避免一次性加载所有图片,以及使用懒加载策略等。 总结: 多点触控图片缩放...
在Android应用开发中,用户交互体验是至关重要的,而拖拉(Drag & Drop)和多点触控(Multi-Touch)功能则极大地丰富了这一体验。本案例将深入讲解如何在Android环境中实现在图片上应用这两种功能,允许用户对图片进行...
flash,多点触控开发 经过自己优化,基于BorderContainer,只要往里面的image里面放入图片即可实现多点触控的旋转放大缩小灯操作。
通过学习和研究这个多点触控实例源码,你将能够理解Android多点触控的工作原理,以及如何在实际项目中实现和优化这类功能。这将有助于提升你的Android开发技能,并使你的应用更具交互性和吸引力。
在Android平台上,手势识别与多点触控是移动应用开发中的关键组成部分,它们极大地提升了用户交互体验。Android系统提供了一套强大的API,使得开发者能够轻松地处理和解析用户的触摸事件,进而实现各种复杂的手势...
本文将深入探讨如何在Android应用程序中实现图片的多点触控缩放功能。我们将讨论以下几个关键知识点: 1. **手势检测**: 在Android中,多点触控依赖于手势检测。我们可以通过监听MotionEvent事件来捕获用户的触摸...
总的来说,这个Demo涵盖了Android多点触控事件的处理和UI动态更新,对于开发者来说,这是一个很好的学习实例,可以帮助他们理解如何在实际应用中实现类似的功能。通过研究源码,开发者不仅可以掌握多点触控的基本...
当我们需要实现更复杂的交互,比如双击图片放大缩小以及多点触控操作时,通常需要对默认的`ImageView`进行扩展或使用第三方库来实现。在这个场景中,我们关注的是如何通过自定义`ImageView`实现双击放大缩小以及多点...
要实现Android多点触控,我们需要理解触摸事件的处理机制以及如何在代码中应用。 首先,Android的多点触控功能自API Level 8(即Android 2.0)开始引入。在较低版本的Android系统中,可能不支持多点触控。为了确保...
主要介绍了Android多点触控实现对图片放大缩小平移,惯性滑动等功能的相关资料,需要的朋友可以参考下
在IT领域,尤其是在移动应用开发中,多图片预览功能及图片多点触控是常见的需求,这使得用户能够互动地查看和操作图像。本文将深入探讨如何实现这些功能,包括图片自由缩放、双击缩放、图片自由移动以及与ViewPager...