【问题标题】:Android onTouch must be triggered twice in order to trigger actionBar.show() and button position changeAndroid onTouch 必须触发两次才能触发 actionBar.show() 和按钮位置变化
【发布时间】:2013-05-13 14:43:11
【问题描述】:

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

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

我的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;
}

【问题讨论】:

  • 我认为这不是触摸事件处理程序的问题。由于您第一次看到显示栏而不是按钮,请检查您如何移动按钮。很明显,自从操作栏出现以来,您的代码正在执行。
  • 您好新,感谢您的评论!我通过在我粘贴的代码中调整它的边距来移动按钮。我将垂直边距设置为actionBar的高度,然后将按钮的参数设置为更新后的参数。我很困惑,因为它确实运行,它只需要在它运行之前被击中第二次。我尝试将它放在显示操作栏的代码之后,以防它在隐藏时做一些奇怪的事情,高度为 0。它的运行方式没有任何区别。
  • 在你触摸之前你的按钮是可见的吗?
  • 是的。该按钮开始显示在应用程序的右上角。当触发 onTouch() 事件时,会显示 actionbar(在覆盖模式下,这就是为什么我需要手动调整按钮的位置)并且按钮应该向下移动操作栏的高度。

标签: android user-interface actionbarsherlock imagebutton touch-event


【解决方案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;
}

【讨论】:

  • 非常感谢,帮了我很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多