Android:Slidingdrawer.lock()阻止其余布局的触摸输入

时间:2011-02-07 15:48:34

标签: android locking onclick slidingdrawer gesturedetector

我有一个带有viewFlipper和一个slidingDrawer的Activity。 SlidingDrawer的Handler包含一个可点击的额外按钮。

问题是,处理程序上的额外按钮仅在slidingDrawer被锁定时注册onClick,而当slidingDrawer被锁定时,viewFlipper(布局的其余部分)不再响应gestureListener,因此我无法翻转在观点之间。

有没有人对如何在slidingDrawer的处理程序上点击一个额外的按钮有任何建议,同时在viewFlipper上有一个有效的gesturelistener?

也许有人知道为什么slidingDrawer.lock()会阻止其余布局的触摸输入?

谢谢!

3 个答案:

答案 0 :(得分:0)

这是一个已知问题 看到这个解决方案 http://code.google.com/p/android/issues/detail?id=17844

答案 1 :(得分:0)

此解决方案适用于我:扩展SlidingDrawer并覆盖onTouchEvent方法(如果slidedrawer被锁定,则应返回false而不是true):

package xxx.slidingdrawer;

import android.content.Context;
import android.util.AttributeSet;
import android.view.MotionEvent;

@SuppressWarnings("deprecation")
public class SlidingDrawer extends android.widget.SlidingDrawer {

    private boolean mLocked;

    public SlidingDrawer(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    @Override
    public void lock() {
        super.lock();
        mLocked = true;
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        if (mLocked) {
            return false;
        } else {
            return super.onTouchEvent(event);
        }
    }
}

答案 2 :(得分:-1)

我发现了导致这个问题的slidingDrawer的哪个部分。如果slidingDrawer被锁定,则onInterceptTouchEvent()方法返回false。

无论如何,我通过创建一个使用以下方式上下滑动的新Activity来伪装一个slidingDrawer来“解决”这个问题:

startActivity(yourIntent);
    overridePendingTransition(R.anim.yourNextActivity_InAnimation, R.anim.yourCurrentActivity_OutAnimation);

缺点是不能再用手指拖动抽屉了。