将ActionBar隐藏在触摸表面上

时间:2013-01-18 03:01:11

标签: java android touch android-actionbar

我正在写一个非常简单的Android应用程序。当用户触摸表面并移动他们的手指时,图片被绘制在他们的手指下方。当他们的手指抬起时,它会停止。

我希望操作栏在手指向下时隐藏,并在手指向上时重新出现。

ActionBar被重叠。我认为在我的视图中使用ActionBar.hide()和.show()的onTouchEvent会正常工作,但我遇到了一些问题。

我尝试了一些事情。首先,我尝试将在Activity中创建的ActionBar传递给视图,但这不起作用,因为必须在ActionBar“get”之前创建视图,所以我只是传入一个空值。

然后我尝试创建一个静态ActionBar,我可以从我的视图中调用它,但后来我得到了这个错误:“只有创建视图层次结构的原始线程才能触及它的视图。”

有人知道解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

看一下jfeinstein10的Sliding Menu library

中的一个例子

BirdActivity.java中,您将看到ActionBar在2秒后如何显示和隐藏。您自然必须自己调整代码。但这应该让你开始:

第53-58行

中的代码摘录
imageView.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        getSupportActionBar().show();
        hideActionBarDelayed(mHandler);
    }
});

来自第80行 - 第86行的hideActionBarDelayed()

private void hideActionBarDelayed(Handler handler) {
    handler.postDelayed(new Runnable() {
        public void run() {
            getSupportActionBar().hide();
        }
    }, 2000);
}

<强>更新

由于缺乏代码,大多数问题都已被假定。仅仅因为OP缺乏数据可能是错误的。话虽这么说,如果整理“只有创建视图层次结构的原始线程可以触及它的视图。”问题会修复它,也许这可能会为你做到:

Runnable run = new Runnable() {

    @Override
    public void run() {
            // RUN YOUR CODE TO HIDE / SHOW THE ACTIONBAR HERE      
    }
}; YOUR_ACTIVITY.this.runOnUiThread(run); // REPLACE WITH getActivity().runOnUiThread(run); IF THIS IS A FRAGMENT

注意:在该示例中,相关活动使用ActionBarSherlock并扩展SherlockActivity,因此使用getSupportActionBar()。如果您不使用ABS,则必须使用getActionBar()而不是前者。