Android Gallery翻转问题

时间:2012-01-27 17:33:42

标签: android android-gallery

我有一个包含TextView标签的视图库,然后是下面的列表视图。它的工作非常好,除了为了让它从一个元素转换到另一个元素,用户必须触摸列表视图上方(靠近标签)和fling或介于图库对象之间。有时在listview下面也可以工作。但是我真的希望能够在触摸列表视图的同时进行操作,因为它占据了屏幕的大部分。如何才能做到这一点?你需要看什么代码?

2 个答案:

答案 0 :(得分:1)

我遇到了类似的问题并通过覆盖Gallery并实现onInterceptTouchEvent来解决这个问题,以确保Gallery拦截移动事件,并正常处理所有其他事件。

在onInterceptTouchEvent中返回true会导致此触摸序列中的所有后续触摸事件被发送到此视图,false会将事件留给该子视图。 需要TouchSlop,因为在点击时有时会有少量移动。

很想将此视为我自己的想法,但从默认的Android Launcher代码中获取代码的基础知识。

public class MyGallery extends Gallery{

private MotionEvent downEvent;
private int touchSlop;
private float lastMotionY;
private float lastMotionX;

public MyGallery(Context context) {
    super(context);
    initTouchSlop();
}

private void initTouchSlop() {
    final ViewConfiguration configuration = ViewConfiguration.get(getContext());
    touchSlop = configuration.getScaledTouchSlop();
}

@Override public boolean onInterceptTouchEvent(MotionEvent ev) {
    final float x = ev.getX();
    final float y = ev.getY();

    switch (ev.getAction() & MotionEvent.ACTION_MASK) {
        case MotionEvent.ACTION_MOVE: {
            final int xDiff = (int) Math.abs(x - lastMotionX);
            final int yDiff = (int) Math.abs(y - lastMotionY);

            // have we moved enough to consider this a scroll
            if (xDiff > touchSlop || yDiff > touchSlop) {
                // this is the event we want, but we need to resend the Down event as this could have been consumed by a child
                Log.d(TAG, "Move event detected: Start intercepting touch events");
                if (downEvent != null) this.onTouchEvent(downEvent);
                downEvent = null;
                return true;
            }
            return false;
        }
        case MotionEvent.ACTION_DOWN: {
            // need to save the on down event incase this is going to be a scroll
            downEvent = MotionEvent.obtain(ev);
            lastMotionX = x;
            lastMotionY = y;
            return false;
        }
        default: {
            // if this is not a down or scroll event then it is not for us
            downEvent = null;
            return false;
        }
    }
}

答案 1 :(得分:0)

您可能希望在列表视图上设置onTouchListener(),或者可能是整个线性/相对布局。

getListView().setOnTouchListener(yourlistener)或者在整个布局上设置它。如果您发布一些代码,我可以帮助您。 XML以及如何使用Java类将是最有帮助的。