【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!

思路:

1.gallery内控件挂载事件(如:onClickListener)的方法类似listview,可直接在baseAdapter.getView内给控件挂载(具体方法百度)。

2.貌似没问题,但滑动后(手指在挂载了事件的控件上)抬起手指时仍会触发事件,这是不对的。

解决方法时,若为滑动(x有偏移),则在gallery.onInterceptTouchEvent中拦截事件,子控件自然接受不到事件。

注:1>不能简单的判断x有偏移就拦截,有些设备犯贱,即使原地抬起也有可能有偏移,此时本应触发onClick却也被拦截掉了。所以为兼容大多数机器,需水平移动超过一定阈值时再拦截。所以在阈值范围内,gallery是不动的。

3.问题又来了,缓慢滑动第2项时,会发现"子项"有明显的突变(x坐标突变)。基本原因是看似滑动超过阈值后,gallery才开始正常移动,其实在手开始移动时(gallery尚未移动时),gallery也做了一些初始化,导致gallery真正移动时存在误差。

解决方法时,在阈值内滑动手指时,不断做这种初始化,这样在gallery真正开始运动时,初始化就没有误差了。

public class MyGallery extends Gallery {
	float mLastMotionX = 0;

	public MyGallery(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
	}

	public MyGallery(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		// TODO Auto-generated constructor stub
	}

	public MyGallery(Context context, AttributeSet attrs) {
		super(context, attrs);
		// TODO Auto-generated constructor stub
	}

	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {

		final int action = ev.getAction();
		final float x = ev.getX();
		switch (action) {
		case MotionEvent.ACTION_MOVE:

			final int xDiff = (int) Math.abs(x - mLastMotionX);

			if (xDiff >50) {
				return true;
			}
			break;
		case MotionEvent.ACTION_DOWN:

			mLastMotionX = x;

			//防止滑动"第2项"时,发生突变
			onTouchEvent(ev);
			break;
		}
		return false;
	}
}

【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!

时间: 2024-10-10 05:53:18

【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!的相关文章

【安卓】给gallery内"控件"挂载事件,滑动后抬起手指时也触发事件(滑动时不应触发)的解决、!

思路: 1.gallery内控件挂载事件(如:onClickListener)的方法类似listview,可直接在baseAdapter.getView内给控件挂载(详细方法百度). 2.貌似没问题,但滑动后(手指在挂载了事件的控件上)抬起手指时仍会触发事件,这是不正确的. 解决方法时,若为滑动(x有偏移),则在gallery.onInterceptTouchEvent中拦截事件,子控件自然接受不到事件. 注:1>不能简单的推断x有偏移就拦截,有些设备犯贱,即使原地抬起也有可能有偏移,此时本应触

WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享

WinForm容器内控件批量效验是否允许为空?设置是否只读?设置是否可用等方法分享 在WinForm程序中,我们有时需要对某容器内的所有控件做批量操作.如批量判断是否允许为空?批量设置为只读.批量设置为可用或不可用等常用操作,本文分享这几种方法,起抛砖引玉的作用,欢迎讨论! 1.  清除容器控件内里面指定控件的值的方法 /// <summary> /// 清除容器里面指定控件的值(通过控件的AccessibleName属性设置为"EmptyValue") /// </

关于ASP.net TextBox控件的失去焦点后触发其它事件

编写人:CC阿爸 2015-2-02 今天在这里,我想与大家一起分享如何处理的ASP.net TextBox控件的失去焦点后触发其它事件的问题,在此做个小结,以供参考.有兴趣的同学,可以一同探讨与学习一下,否则就略过吧. 1.首先弄清楚问题,asp.net 2.0服务器控件没有onBlur.因此我们第一个方法是采用 OnTextChanged 来处理有一点要注意,txtVen的autopostback要设置为true.<asp:TextBox ID="txtVen" runat=

安卓开发_单选按钮控件(RadioButton)的简单使用

最近复习安卓基础的时候发现没有写关于单选按钮.复选按钮的博客,可能因为以前学习的时候感觉太简单了就没有写,现在补上吧 当我们在各种客户端注册账号的时候,会有几项单选项,比如选择您的性别.下面就是学习怎么实现这种效果 一.安卓中,单选按钮用RadioButton表示,因为RadioButton是Button的子类,所以可以使用Button的各种属性 RadioButton一般是不单独使用的需要结合RadioGroup控件一起使用,将若干个RadioButton放在一个RadioGroup中,那么将

安卓锁屏音乐控件开发

首先我个人先吐槽一下,这是一个吃力不讨好的活.为什么?因为现在安卓手机的各种定制rom五花八门,各种各样,miui.乐蛙.emui.努比亚...我们今天要做的事情就是要在各种系统的锁屏界面,出现一个音乐控件,用来做一些简单的音乐播放的控制. 做之前,习惯性的看了各大家的做法:酷我.多米等,这些家的做法的思路都一样,都是在自己的应用中监听power锁屏事件,然后加一个"假锁屏",即每次锁屏再打开的时候,首先显示的是自己音乐的锁屏,滑开以后再跳到系统的锁屏.这样做的好处是,通吃各种系统,弊

【安卓自定义控件系列】安卓自定义控件之组合控件

在安卓开发中,谷歌已经为我们提供了许多原生控件,基本上能够满足我们日常的开发需求,但是某些项目中原生控件可能达不到产品所要求的各式各样的酷炫效果或功能效果,这个时候我们只能自己自定义控件来满足项目需求,我们知道自定义控件包括三种方式: 1继承控件,即继承谷歌提供的原生控件,在此基础上提供一些原生控件不具备的功能,如github上各种酷炫效果的开源组件基本上都是采用的这种方式. 2组合控件:即组合多个原生控件来达到某些单个原生控件原本不具备的功能,这个在日常开发中应该是使用的比较多的,如基本上每个

新浪微博客户端(23)-计算Cell内控件的frame

DJStatusCellFrame.m #import "DJStatusCellFrame.h" #import "DJStatus.h" #import "DJUser.h" @implementation DJStatusCellFrame - (void)setStatus:(DJStatus *)status { _status = status; DJUser *user = status.user; /* 计算控件Frame */

安卓自己定义日历控件

尊重作者劳动成果.转载请注明出处:http://blog.csdn.net/baiyuliang2013/article/details/37732149 近期,因工作须要,须要实现自己定义日历控件功能,主要应用于软件中的酒店入住时间选择功能.进入日历后,可选择入住时间,及离开时间,选择完毕后,再次进入日历时.会显示上次选中的结果,默认选择日期是在距当前日期三个月内.三个月以外的均以灰色显示.且不可点击.本篇实现的效果是高仿某软件的界面效果: 某软件界面效果: watermark/2/text/

使用安卓中的TextToSpeech控件实现朗读文字

首先感谢原文的博主,本文中的代码均来自该博主:(原文地址)http://flycatdeng.iteye.com/blog/1827245 朗读文字不需要任何的权限,这个控件的好处是首先不要权限,其次不用联网避免了如讯飞的联网登权限(讯飞其实也不错,比较智能,该控件只能读取简单的文字) 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http