Gallery中的TextView

时间:2011-07-14 06:23:02

标签: android scroll textview gallery

我有可滚动的TextViewGallery 当我为onTouchEvent()启用TextView时,我无法浏览Gallery 如果我禁用onTouchEvent(),我可以左右滚动Gallery 但无法向上滚动到TextView

我试图做一些技巧,比如向MotionEvent()Gallery发送相同的TextView .. 任何想法如何解决?

7 个答案:

答案 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。将此作为您的图库项目。