Android 解决Gallery下ScrollView滑动事件冲突

在Gallery下,里面内容过长超出屏幕,这时我们可以用ScrollView来滚动,但是这样做了以后,会发现一个问题,Gallery的滑动事件和ScrollView的滑动事件起冲突,这时我们可以自定义Gallery控件来避免这个问题:

下面贴出代码:

 

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.widget.Gallery;

public class TestGallery extends Gallery {
	private float gTouchStartX;
	private float gTouchStartY;

	public TestGallery(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
	}

	public TestGallery(Context context, AttributeSet attrs) {
		super(context, attrs);
	}

	public TestGallery(Context context) {
		super(context);
	}
	
	@Override
	public boolean onInterceptTouchEvent(MotionEvent ev) {
		int action = ev.getAction();
		switch(action){
		case MotionEvent.ACTION_DOWN:
			gTouchStartX = ev.getX();
			gTouchStartY = ev.getY();
			super.onTouchEvent(ev);
			break;
		case MotionEvent.ACTION_MOVE:
			final float touchDistancesX = Math.abs(ev.getX()-gTouchStartX);
			final float touchDistancesY = Math.abs(ev.getY()-gTouchStartY);
			if(touchDistancesY *2 >= touchDistancesX){
				return false;
			}else{
				return true;
			}
		case MotionEvent.ACTION_CANCEL:
			break;
		case MotionEvent.ACTION_UP:
			break;
		}
		return false;
	}
	
	@Override
	public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
			float velocityY) {
		if(e2.getX() > e1.getX()){
			onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null);
		}else{
			onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
		}
		return false;
	}

}


 

 

posted @   jlins  阅读(992)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示