Android 解决Gallery下ScrollView滑动事件冲突
2013-06-29 15:38
489 查看
在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;
}
}
下面贴出代码:
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;
}
}
相关文章推荐
- Android 解决Gallery下ScrollView滑动事件冲突
- Android中自定义ListView,解决scrollview嵌套listview 滑动事件冲突
- Android中ScrollView与MapView滑动事件冲突解决
- Android scrollview嵌套listview 滑动事件冲突的解决方法
- android scrollView 内嵌ViewPager或Gallery等水平滑动控件冲突问题解决实现同时滑动
- Androidの解决ViewFlipper与ScrollView滑动响应事件拦截的问题
- ScrollView和ListView等组件滑动事件冲突解决方法
- Android——滑动事件冲突解决
- android 滑动事件冲突解决 Touch事件处理机制
- Android中scrollview和viewpage滑动冲突解决
- Android动画及滑动事件冲突解决(转载)
- Android中ScrollView与listView冲突以及ScrollView与listView无法滑动(拖动)解决办法
- android开发步步为营之65:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题
- 备忘-Android ViewPager 与Gallery滑动冲突解决方法
- 关于ScrollView和WebView滑动事件冲突的解决办法
- Android-解决ViewFlipper与ScrollView滑动响应事件拦截的问题
- android开发步步为营之65:解决ScrollView和ListView触摸事件onInterceptTouchEvent相互冲突问题
- Android中Recyclerview使用10----Recyclerview外面嵌套ScrollView滑动事件冲突
- 【Android】ScrollView和GestureDetector触碰事件冲突的解决
- Android 给大家分享一个解决ViewPager和Scrollview滑动冲突的工具类