andriod应用程序添加手势识别

本文详细介绍了如何在Android应用中实现从左向右滑动触发手势识别,进而弹出对话框的功能。通过创建自定义触摸监听器和手势识别器,结合MotionEvent事件处理,实现了手势与特定操作的对应。具体步骤包括创建触摸监听器接口、初始化手势识别器、设置手势监听事件处理器以及在Activity中添加监听器。

目的:android应用程序添加手势识别,从左向右滑动,弹出对话框。

原理:当手机被触摸时,首先触发一个MotionEvent事件,该事件被OnTouchListener监听,在起OnTouch( View view, MotionEvent event )方法中获得该事件. 该事件中

封装了很多信息,包括手机被触摸的点,被触摸的时间长度,触摸的类型(单击,短按,长按,活动)等。然后该事件通过GestureDetector(手势识别器),传递给OnGestureListener接口处理, 最后OnGestureListener根据封装的信息,做出相应的处理。


实现过程:

Part1:  创建Listener

1. 创建一个接口OnSwipeTouchListener,其实现OnTouchListener接口。

2.在OnSwipeTouchListener中,定义private, GestureDetectorl类型的变量mgestureDetector,用于接受触摸传进来的MotionEvent事件,并且并且为该对象指定一个接口

OnGestureListener()来处理。

2.1 接口OnGestureListener继承类SimpleOnGestureListener

2.2 在接口OnGestureListener中,定义了函数onDown( MotionEvent e)和onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY)

2.3当MotionEven传进来的时,会调用函数OnFling()处理

2.4在函数OnFling()中,根据手势的不同,调用不同的OnSwipeTouchListener()中的函数onSwipeRight(),onSwipeLeft()onSwipeTop(),

tonSwipeDown()进行处理.

3. OnSwipeTouchListener中,先定义上次四个函数,内容为空。

4.OnSwipeTouchListener中,复写函数onTouch(View arg0, MotionEvent event),将传进来的MotionEven传到前面定义的GestureDetector对象中, 该

GestureDetector对象接受到事件后,会调用接口函数处理。

package com.example.drawer_test;

import android.content.Context;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.GestureDetector.SimpleOnGestureListener;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.AdapterView.OnItemClickListener;

public class OnSwipeTouchListener implements OnTouchListener {

		private final GestureDetector mgestureDetector; //手势识别器

		public OnSwipeTouchListener(Context Ctx){
			
			mgestureDetector = new GestureDetector( Ctx, new OnGestureListener() );
			
		}
		
		public class OnGestureListener extends SimpleOnGestureListener {
			
			private static final int SWIPE_THRESHOLD = 100;
			private static final int SWIPE_VELOCITY_THRESHOLD = 100;

			public boolean onDown(MotionEvent e) {
				return true;
			}

			public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
				boolean result = false;
				try {
					float diffY = e2.getY() - e1.getY();
					float diffX = e2.getX() - e1.getX();
					if (Math.abs(diffX) > Math.abs(diffY)) {
						if (Math.abs(diffX) > SWIPE_THRESHOLD && Math.abs(velocityX) > SWIPE_VELOCITY_THRESHOLD) {
							if (diffX > 0) {
								onSwipeRight();
							} else {
								onSwipeLeft();
							}
						}
					} else {
						if (Math.abs(diffY) > SWIPE_THRESHOLD && Math.abs(velocityY) > SWIPE_VELOCITY_THRESHOLD) {
							if (diffY > 0) {
								onSwipeBottom();
							} else {
								onSwipeTop();
							}
						}
					}
				} catch (Exception exception) {
					exception.printStackTrace();
				}
				return result;
			}
		
		}
			public void onSwipeRight() {
			}
	
			public void onSwipeLeft() {
			}
	
			public void onSwipeTop() {
			}
	
			public void onSwipeBottom() {
			}			
		
		
		@Override
		public boolean onTouch(View arg0, MotionEvent event) {
			// TODO Auto-generated method stub
			
			return mgestureDetector.onTouchEvent(event);
		}
}

Part2: 为Activity添加listener, 在onCreat()函数中

1.创建AlertDialog

2. 实例化接口OnSwipeTouchListener, 并且复写对应的函数onSwipeRight(),onSwipeLeft()onSwipeTop(), onSwipeDown().

3. 为Activity添加listener

<span style="white-space:pre">	</span>//Initialize an AlertDialog
<span style="white-space:pre">	</span>final AlertDialog.Builder mDialogShow = new Builder(this);
	mDialogShow.setTitle("SwipeTop").setMessage("SwipeTop").setPositiveButton("是", null);
	//prepare gesture detector
	mSwipeTouchListener = new OnSwipeTouchListener(this){
	public void onSwipeTop(){
		setTitle("SwipeTOP");
			mDialogShow.create().show(); 
	}
<span style="white-space:pre">	</span>};

       findViewById(R.id.content_frame).setOnTouchListener(mSwipeTouchListener);</span>//添加Listener





内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值