怎么在popupwindow上监听手势

============问题描述============

具体就是我写了一个popupwindow类,implements OnGestureListener,但是一般都得在onTouchEvent里边返回true,可是popupwindow里边没有这个方法,所以当有手势的时候就没走OnGestureListener的那些onSingleTapUp、onShowPress等方法。。请问如何解决这个问题。

就是说我想在popupwindow弹出后,监听上边的手势。

============解决方案1============

我觉得你可以思考一下一下2个问题:

(1)是不是非的监听整个popwindow窗口的手势,如果监听里面某一个控件的手势行不行?

(2)为什么要让popwindow窗体来继承 OnGestureListener,为什么不直接新建一个手势类,然后让popwindows窗体来绑定这个类。

我给你2种解决方案:

(1)根据你的描述,假定你如果得到了onTouchEvent的事件就可以解决这个问题,所以我给出的第一个解决方案是:implements OnTouchListener, OnGestureListener多继承一个OnTouchListener事件,里面自动继承一个onTouch事件,该事件和你刚纔所说的onTouchEvent等价。

(2)第二种方法,有点取巧,假设你的popwindow的布局文件类似如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

     android:id="@+id/poplayout"

    android:layout_width="match_parent"

    android:layout_height="match_parent" >

 ......

</RelativeLayout>

新建一个类叫做MyGestureListener.java,代码如下:

class MyGestureListener implements OnTouchListener, OnGestureListener {

		@Override

		public boolean onDown(MotionEvent e) {

			// TODO Auto-generated method stub

			return false;

		}

		@Override

		public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,

				float velocityY) {

			return false;

		}

		@Override

		public void onLongPress(MotionEvent e) {

			// TODO Auto-generated method stub

		}

		@Override

		public boolean onScroll(MotionEvent e1, MotionEvent e2,

				float distanceX, float distanceY) {

			return false;

		}

		@Override

		public void onShowPress(MotionEvent e) {

			// TODO Auto-generated method stub

		}

		@Override

		public boolean onSingleTapUp(MotionEvent e) {

			// TODO Auto-generated method stub

			return false;

		}

		@Override

		public boolean onTouch(View v, MotionEvent event) {

			gesture_detector.onTouchEvent(event);

			return false;

		}

	}

在对应的函数中调用:

	RelativeLayout poplayout=poplayout=(RelativeLayout)findViewById(R.id.pop);

poplayout.setOnTouchListener(new MyGestureListener());

这样一来就能实现手势调用了,在MyGestureListener类中该干嘛干嘛。

时间: 2024-10-13 12:45:49

怎么在popupwindow上监听手势的相关文章

201507221403_《backbone之一——新建模型和集合、实例化模型、模型上监听事件的方法、模型设置和获取后台数据、配置理由方法、视图绑定事件的方法、绑定模型等》

一 . 新建 var model_1 = new Backbone.Model({'name':'hello'}); var model_2 = new Backbone.Model({'name':'hi'}); var models = new Backbone.Collection(); models.add( model_1 ); models.add( model_2 ); alert( JSON.stringify(models) ); 二. 实例化模型 var M = Backbo

ssh远程转发使远程主机在所有ip上监听

起因:突然一夜之间电信扰拨号ip全变内网地址了,这样即使用了动态域名,绑定的也不是本机ip,外部无法访问了.虽然打电话找电信反映说是可以改回来,但必须先解决眼前的问题,访问内网服务器上的svn仓库. 办法:由于还有一台在公网上的云主机,想到可通过它中转,只要内网主机先与云主机建立连接,这正好可以用ssh的远程转发功能,命令如下: ssh -gN -R 3690:0.0.0.0:3690 -o ServerAliveInterval=60 [email protected] 结果连接是建立了,但是

【WCF】终结点的监听地址

终结点主要作用是向客户端公开一些信息入口,通过这个入口,可以找到要调用的服务操作.通常,终结点会使用三个要素来表述,我记得老蒋(网名:Artech,在园子里可以找到他)在他有关WCF的书里,把这三要素称为“ABC”. A就是Address,就是终结点的地址:B是Binding,绑定,用于描述传输的协议.是否启用安全模式等:C是Contract,即服务协定. 一个服务协定可以由多个终结点公开,比如一个终结点可能使用HTTP协议,另一个则使用TCP等. WCF是否真的像某些人说的那么复杂难学呢?依老

Angularjs【监听数据的变化】和【如何修改数据】和【数据变化的传播】

一:监听数据的变化: 由于编译仅仅在启动引导时执行一次,这意味着我们的link函数只会被调用一次,那么, 如果数据变化,在界面上将不会有任何反馈,即界面和数据将变得不同步了. 这需要持续监听数据的变化. 好在AngularJS的scope对象可以使用$watch()方法,对建立在其上的变量的变化进行监听: watch(watchExpression,listener,[objectEquality]);watch方法要求传入三个参数: watchExpression - 要监听的表达式,比如:"

ORACLE 多实例监听的配置

多实例监听的配置 三种情况: 1.一个监听在一个IP一个端口上监听多个实例 2.一个监听在一个IP不同端口上监听多个实例 3.多个监听监听多个实例 情况1: listener.ora文件: # listener.ora Network Configuration File: E:\app\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora # Generated by Oracle configuration tools. SID_LIST_OR

oracle网络 监听

这里讲解一下我对oracle网络的理解(静态监听): 监听的工作原理: 监听说白了,就是个套接字+PROTOCOL(协议) 套接字是通信的基石,是支持TCP/IP协议网络通信的基本单元.可以将套接字看作不同主机 之间的进程双向通信的端点. 一个完整的网络通讯必须具备协议.本地地址.本地端口.远程地址.远程端口和协议这5个基本要素,在创建套接字时确定了协议类型,而在绑定套接字确定了本地地址和本地端口,远程地址和远程端口.套接字即就是ip+port . 1.数据库启动起来之后(数据文件.控制文件.日

iOS开发:使用代理模式监听开关状态改变事件

记一次解决跨控制器监听开关状态改变的尝试. 为了统一设置UITableViewCell里的内容,自定义了UITableViewCell类的一个基类,命名为SettingCell.SettingCell里显示的内容由数据模型SettingItem提供:在SettingCell里定义一个属性即可. @property (nonatomic, strong) SettingItem *item; 再定义几个SettingItem的子类表示显示不同内容的Cell(如图1).由于所有开关状态的归档和解档都

Cloud Foundry中DEA与warden通信完成应用端口监听

在Cloud Foundry v2版本中,DEA为一个用户应用运行的控制模块,而应用的真正运行都是依附于warden.更具体的来说,是DEA接收到Cloud Controller的请求:DEA发送请求给warden server:warden server创建warden container并将用户应用droplet等环境配置好:DEA发送应用启动请求至warden serve:最后warden container执行启动脚本启动应用. 本文主要具体描述,DEA如何与warden交互,以保证最终

nginx监听端口和反向代理端口的权限问题

Linux的SELinux安全性控制除作用于文件系统外还作用于端口,这使得那些作为服务启动的进程只能在规定的几个端口上监听.为叙述方便我们称之为受控端口. nginx监听端口 要查看当前有哪些受控端口可执行: # semanage port -l | grep '^http_port_t' http_port_t tcp 80, 81, 443, 488, 8008, 8009, 8443, 9000 这里显示了八个端口号,其中包括80端口.由于nginx默认在80端口监听因此启动正常. # s