我有可滚动的TextView
和Gallery
当我为onTouchEvent()
启用TextView
时,我无法浏览Gallery
如果我禁用onTouchEvent()
,我可以左右滚动Gallery
但无法向上滚动到TextView
。
我试图做一些技巧,比如向MotionEvent()
和Gallery
发送相同的TextView
..
任何想法如何解决?
答案 0 :(得分:1)
嘿,你必须尝试这个代码,它会帮助你解决问题
float oldx;
float oldy;
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean result = false;
if(event.getAction() == MotionEvent.ACTION_DOWN) {
result = super.onTouchEvent(event);
} else if (event.getAction() == MotionEvent.ACTION_UP) {
result = super.onTouchEvent(event);
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
/**
* Condition :: Math.abs(oldx - event.getX()) > 10 will check weather user had drag horizontal or vertical.
* You can change value 10 according to your requirement
*/
if(Math.abs(oldx - event.getX()) > 10) {
result = super.onTouchEvent(event);
} else {
result = true;
}
}
oldx = event.getX();
oldy = event.getY();
return result;
}
答案 1 :(得分:1)
您是否尝试在库中使用ScrollView?以下是一些工作示例:ScrollView inside Gallery, both scrolling independently
答案 2 :(得分:1)
我的回答:
public class CustomGallery extends Gallery {
public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public CustomGallery(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGallery(Context context) {
super(context);
}
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
float r = (velocityX > 0 ? Math.min(800f, velocityX) : Math.max(-800f, velocityX));
return super.onFling(e1, e2, r, velocityY);
}
float oldX, oldY;
boolean isDown = false;
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
int action = ev.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
oldX = ev.getX();
oldY = ev.getY();
isDown = true;
return super.onInterceptTouchEvent(ev);
case MotionEvent.ACTION_MOVE:
if (isDown) {
float diffX = Math.abs(ev.getX() - oldX);
float diffY = Math.abs(ev.getY() - oldY) + 20f;
if (diffY > diffX) {
return false;// handled by TextView
}
}
return true;// handled by Gallery
case MotionEvent.ACTION_UP:
isDown = false;
return super.onInterceptTouchEvent(ev);
default:
return super.onInterceptTouchEvent(ev);
}
}
}
感谢@teepee为解决方案提供了一个巨大的提示:D
答案 3 :(得分:0)
而不是onTouchevent为什么不在MotionEvent上的gallery内使用onclick事件进行textview
答案 4 :(得分:0)
尝试在onTouch事件中设置return false
。
答案 5 :(得分:0)
TextView
和/或Gallery
可能会使焦点远离ListView
,如果您正在使用其中一个或滚动功能,从而无法向上滚动向下,尝试删除TextView和Gallery的焦点,看看是否有帮助。那么你应该仍然可以使用你的touchEvents ...只是一个想法,不知道它是否会真正解决问题。希望我能得到更多的帮助。
答案 6 :(得分:0)
创建一个扩展容器布局的自定义视图,并包含可滚动的TextView。将此作为您的图库项目。