0

我的onTouchEvent. 当您触摸屏幕边缘时,它应该显示操作栏(使用ActionbarSherlock,而不是 android 操作栏),然后"buttonClick"向下移动按钮以适应操作栏的高度。

这有效,但前提是您触摸两次。第一次触摸时,操作栏显示,第二次触摸时,按钮向下移动。我不知道为什么它在第一次触摸时两者都没有,而且我在这里的搜索只发现有人遇到它根本没有触发的问题,或者有几个人遇到了 onTouch触发两次的问题,而不仅仅是一次。

我的onTouchEvent()代码在下面,如果有人能帮助我理解为什么它会这样做,我将不胜感激。

public boolean onTouchEvent(MotionEvent event) {
    int x = (int)event.getX();
    int y = (int)event.getY();
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            Log.v(TAG, "New Touch");
            Log.v(TAG, "Screen Width: "+ screen_width);
            if (x >= (screen_width - 95)){
                int actionHeight = getSupportActionBar().getHeight();
                Log.v(TAG, ""+actionHeight);
                thumbParams.setMargins(0,actionHeight,0,0);
                thumbClick.setLayoutParams(thumbParams);
                params.setMargins(0,actionHeight,0,0);
                    buttonClick.setLayoutParams(params);
                getSupportActionBar().show();

            }
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
    }

return false;
}
4

1 回答 1

1

导致所有这一切的具体问题是,我试图将其分配给边距时的getSupportActionBar().getHeight()值。0我尝试了一堆过于复杂的方法来解决这个问题,但最终结果是,我所要做的就是把所有东西都getSupportActionBar().show();搬进ACTION_UP箱子里。

如果他们将手指放在那里太久,可能会有轻微的延迟,但大多数情况下它看起来是瞬间的,现在第一次点击就可以了!我将调整后的代码放在下面,以防我的解释措辞不当。

public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()) {
        case MotionEvent.ACTION_DOWN:
            int x = (int)event.getX();
            int y = (int)event.getY();
            if (x >= (screen_width - 95)){
                getSupportActionBar().show();
            }
        case MotionEvent.ACTION_MOVE:
        case MotionEvent.ACTION_UP:
            actionHeight = getSupportActionBar().getHeight();
            Log.v(TAG, ""+actionHeight);

            thumbParams.setMargins(0, actionHeight, 0, 0);
            params.setMargins(0, actionHeight, 0, 0);
            thumbClick.setLayoutParams(thumbParams);
            buttonClick.setLayoutParams(params);
    }

return false;
}
于 2013-05-16T02:52:23.637 回答