2 jonskeet JonSkeet 于 2013.06.25 10:58 提问

不触屏幕如何隐藏布局

当触摸屏幕时,我使用 OnTouchListener 来显示 layout1,然后当屏幕不被触摸3秒钟后,然后隐藏 layout1。但是我不知道使用哪个事件监视器?
我使用代码:

class unTouchTask extends TimerTask {
public void run() {
if(untouch == true) {
RelativeLayout rl = (
RelativeLayout)findViewById(R.id.relativeLayout2);
rl.setVisibility(View.INVISIBLE);
timer.cancel();
untouch = false;}
}
    }

但是在 rl.setVisibility(View.INVISIBLE);: 行有错误

android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views.

2个回答

Jave_
Jave_   2013.06.25 11:00

错误解决:
通过Handler更新UI实例:
步骤:
1、创建Handler对象(此处创建于主线程中便于更新UI)。
2、构建Runnable对象,在Runnable中更新界面。
3、在子线程的run方法中向UI线程post,runnable对象来更新UI。

参考:http://blog.csdn.net/djx123456/article/details/6325983

此外你的这个思路:
你可以在touch后起一个TimerTask,一秒一次,在外围加个判断if(flag),定义个变量,一次+1,
在onTouch里面如果touch了,将flag变成false,停掉task。如果变量大于3了,则隐藏layout,断掉task。

cj6585256
cj6585256   2013.06.25 12:48
伪代码:

        Handler handler = new Handler(){
         public void handlerMessage() {
         swith(msg.what) {
          case 1:
        layout1.setVisvisby(View.Gone);
        break;
        }
        }
        }

        onTouchListener {
        public void onTouch() {
if(layout1.getVisviable == View.Visable){
    handler.removeMessage(1);
    Message msg = new Message();
    msg.what = 1;
        handler.sendMessageDelay(msg,3000);//3秒
}else {
layout1.setVisable(View.Visable);
}


        }
        }
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!