我有滾動TextView
和Gallery
當我使onTouchEvent()
爲TextView
,我不能瀏覽throught的Gallery
,如果我禁用onTouchEvent()
,我可以滾動左右throught的Gallery
但不能向下滾動到TextView
。的TextView在畫廊
我試着做花樣,像發送相同MotionEvent()
既Gallery
和TextView
.. 任何想法如何解決呢?
我有滾動TextView
和Gallery
當我使onTouchEvent()
爲TextView
,我不能瀏覽throught的Gallery
,如果我禁用onTouchEvent()
,我可以滾動左右throught的Gallery
但不能向下滾動到TextView
。的TextView在畫廊
我試着做花樣,像發送相同MotionEvent()
既Gallery
和TextView
.. 任何想法如何解決呢?
您是否嘗試過在畫廊使用滾動型?下面是一些工作示例:ScrollView inside Gallery, both scrolling independently
明天早上我會試試,謝謝。 –
我修改了您提供的代碼,有點看到我的帖子 –
insted的onTouch事件你爲什麼不使用的onclick事件的TextView裏畫廊onMotionEvent
我沒有處理'Click'事件,我正在處理'Touch'事件! –
嘗試onTouch事件來設置return false
英寸
有可能是TextView
和/或Gallery
從ListView
如果您正在使用一個採取重點遠離或因此滾動能力,使得它不能上下滾動,請嘗試刪除可獲得焦點的TextView的和藝術畫廊和看看這是否有幫助。那麼你應該仍然可以使用你的touchEvents ......只是一個想法,不知道它是否會真正解決問題。希望我能有更多的幫助。
創建一個擴展容器佈局幷包含可滾動TextView的自定義視圖。將其用作您的圖庫項目。
嘿,你一定要試試這個代碼,它會幫助你在你的問題
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;
}
對不起,這沒有奏效! –
我的回答:
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
@Nathan圖,我會盡力做一個樣品。 –