Android手势滑动GestureDetector和OnGestureListener(二)

main.xml如下:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="240dip"
        android:layout_height="300dip"
        android:layout_centerInParent="true"
       />

</RelativeLayout>

 

MainActivity如下:

package cn.com.testgesture2;
import android.os.Bundle;
import android.view.GestureDetector;
import android.view.View;
import android.view.GestureDetector.OnGestureListener;
import android.view.MotionEvent;
import android.view.View.OnTouchListener;
import android.widget.ImageView;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
/**
 * Demo描述:
 * 在ImageView控件上滑动
 * 依据滑动速度的不同显示不同的照片
 *
 * 重要参考:
 * http://www.cnblogs.com/zfrr/archive/2012/07/19/2599591.html
 * 介绍了onFling中速度参数正负的坐标
 */
public class MainActivity extends Activity {
	private GestureDetector mGestureDetector;
    private ImageView mImageView;
    private Bitmap mBitmapA;
    private Bitmap mBitmapB;
    private Bitmap mBitmapC;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		init();
	}

	private void init() {
		mBitmapA=BitmapFactory.decodeResource(getResources(), R.drawable.a);
		mBitmapB=BitmapFactory.decodeResource(getResources(), R.drawable.b);
		mBitmapC=BitmapFactory.decodeResource(getResources(), R.drawable.c);

		mGestureDetector = new GestureDetector(MainActivity.this,new GestureListenerImpl());
		mImageView=(ImageView) findViewById(R.id.imageView);
		mImageView.setImageBitmap(mBitmapA);
		mImageView.setOnTouchListener(new OnTouchListener() {
			@Override
			public boolean onTouch(View arg0, MotionEvent event) {
				return mGestureDetector.onTouchEvent(event);
			}
		});
	}

	//覆写Activity的onTouchEvent方法
	//将Touch事件交给GestureDetector处理
	@Override
	public boolean onTouchEvent(MotionEvent event) {
		return mGestureDetector.onTouchEvent(event);
	}

	//以下为OnGestureListener的实现
	private class GestureListenerImpl implements OnGestureListener {
		//触摸屏幕时均会调用该方法
		@Override
		public boolean onDown(MotionEvent e) {
			return false;
		}

		//手指在屏幕上拖动时会调用该方法
		@Override
		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,float velocityY) {
			System.out.println("---> 手势中的 onFling 方法");
			System.out.println("velocityX="+velocityX+",velocityY="+velocityY);
			if (2000f<velocityX&&velocityX>3000f){
				mImageView.setImageBitmap(mBitmapA);
			}
			if (3000f<velocityX&&velocityX>4000f){
				mImageView.setImageBitmap(mBitmapB);
			}
			if (4000f<velocityX&&velocityX>5000f){
				mImageView.setImageBitmap(mBitmapC);
			}
			return false;
		}

		//长按触摸屏幕时均会调用该方法
		@Override
		public void onLongPress(MotionEvent e) {
		}

		//手指在屏幕上滚动时会调用该方法
		@Override
		public boolean onScroll(MotionEvent e1, MotionEvent e2,float distanceX, float distanceY) {
			return false;
		}

		//在触摸屏上按下,且未移动和松开时调用该方法
		@Override
		public void onShowPress(MotionEvent e) {
		}

		//轻击屏幕时调用该方法
		@Override
		public boolean onSingleTapUp(MotionEvent e) {
			return false;
		}
	}
}

 

时间: 2024-10-23 21:29:19

Android手势滑动GestureDetector和OnGestureListener(二)的相关文章

android手势滑动——左右滑动效果实现

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 8

Android手势滑动实现ImageView缩放图片大小_Android

本文推出了两种Android手势实现ImageView缩放图片大小的方法,分享给大家供大家参考,具体内容如下 方法一:将以下代码写到MulitPointTouchListener.java中,然后对你相应的图片进行OnTouchListener. 例如:imageView.setOnTouchListener(new MulitPointTouchListener ()); 在xml中要将ImageView的缩放格式改成Matrix 例如:android:scaleType="matrix&qu

Android手势滑动实现两点触摸缩放图片_Android

学习安卓手势滑动,多点触摸放大缩小图片,分享给大家供大家参考,具体代码如下1.布局文件如下main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" andro

Android手势滑动实现ImageView缩放图片大小

本文推出了两种Android手势实现ImageView缩放图片大小的方法,分享给大家供大家参考,具体内容如下 方法一: 将以下代码写到MulitPointTouchListener.java中,然后对你相应的图片进行OnTouchListener. 例如:imageView.setOnTouchListener(new MulitPointTouchListener ()); 在xml中要将ImageView的缩放格式改成Matrix 例如:android:scaleType="matrix&q

Android手势滑动实现两点触摸缩放图片

学习安卓手势滑动,多点触摸放大缩小图片,分享给大家供大家参考,具体代码如下 1.布局文件如下main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" andr

Android手势识别器GestureDetector使用详解

以前只知道控件的onTouchEvent()事件,它的动作有MotionEvent.ACTION_DOWN.MotionEvent.ACTION_MOVE.MotionEvent.ACTION_UP;今天有个需求,要监听控件的双击.拖动.滑动等事件,这时onTouchEvent()很明显不能满足我们的需求,经多方打听,找到了今天的主角GestureDetector,下面就对它进行简单的学习. 构造方法: 已过时的有2个,不推荐使用. GestureDetector(GestureDetector

Android实现手势滑动多点触摸缩放平移图片效果_Android

现在app中,图片预览功能肯定是少不了的,用户基本已经形成条件反射,看到小图,点击看大图,看到大图两个手指开始进行放大,放大后,开始移动到指定部位.一.概述想要做到图片支持多点触控,自由的进行缩放.平移,需要了解几个知识点:Matrix , GestureDetector , ScaleGestureDetector 以及事件分发机制,ps:不会咋办,不会你懂的.1.Matrix 矩阵,看深入了都是3维矩阵的乘啊什么的,怪麻烦的~~ 其实这么了解下就行了: Matrix数据结构:3维矩阵:内部存

Android实现手势滑动多点触摸放大缩小图片效果_Android

网上文章虽多,但是这种效果少之又少,我真诚的献上以供大家参考 实现原理:自定义ImageView对此控件进行相应的layout(动态布局). 这里你要明白几个方法执行的流程: 首先ImageView是继承自View的子类.onLayout方法:是一个回调方法.该方法会在在View中的layout方法中执行,在执行layout方法前面会首先执行setFrame方法.setFrame方法:判断我们的View是否发生变化,如果发生变化,那么将最新的l,t,r,b传递给View,然后刷新进行动态更新UI

Android手势ImageView三部曲 第二部

废话不多说了,还记得上一节Android手势ImageView三部曲(一)最后我们提及的那个框架么?这一节我们重点了掌握一下GestureDetector这个类相关的属性方法. 一.那么GestureDetector是干嘛的呢? 顾名思义,字面意思就是"手势检测器"的意思,还记得我们上一节中实现的GestureImageView么?我们在onTouchEvent中检测到了各种个样的手势(手指按下.抬起.什么时候属于拖拽.什么时候属于缩放)都是通过我们的计算得到的,但是有了Gesture