做一个视频播放器,想实现一个功能,如果3秒不点击屏幕任何,则下方一个界面布局(显示按钮那些的)自动消失。

就是这个功能不知道怎么实现,就像很多视频播放器那种,如果点击屏幕任何,下方界面布局(显示按钮那些的)就显示出来,然后等几秒钟没有点击,就消失。
先贴个代码:

 sv.setOnTouchListener(new View.OnTouchListener() {
           @Override
           public boolean onTouch(View v, MotionEvent event) {
               if (linearLayout.getVisibility()==View.INVISIBLE)
                   linearLayout.setVisibility(View.VISIBLE);
              Timer timer=new Timer();
               timer.schedule(new TimerTask() {
                   @Override
                   public void run() {
                       linearLayout.setVisibility(View.VISIBLE);
                   }
               },3000);
               return false;
           }
       });

这种方法不行的,会抛出异常,但是我感觉这个思路没有错,肯定是设置一个surfaceview的触摸事件监听器,但是真的不知道如何实现。以上抛出只有原本的线程能操作ui线程,也就是说主要问题是timer这个线程无法操作setvisibility,但是如果不加入其它线程,又如何实现这个功能,不可能在监听器里面用一个延迟函数,如果在这3秒内又又一次触摸时间,那肯定是要刷新这个时间的啊。。的确没想到解决方法。。。

杨魅力
浏览 660回答 6
6回答

人到中年有点甜

不需要Timer Handler mHandler = new Handler(); Runnable mRunnable; mRunnable = new Runnable() { @Override public void run() { //隐藏view } }; myView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if(event.getAction() == MotionEvent.ACTION_DOWN){ mHandler.removeCallbacks(mRunnable); //显示你的view }else if(event.getAction() == MotionEvent.ACTION_UP || event.getAction() == MotionEvent.ACTION_CANCEL){ mHandler.postDelayed(mRunnable,3000); } return false; } });

哈士奇WWW

runOnUiThread

慕尼黑8549860

发一个延迟的handler去隐藏布局就可以了。在子线程操作UI会有意想不到的问题。

拉丁的传说

试试使用Handler.postDelay()这个方法。 Time lastTime; 触摸屏幕 if(View.VISIBLE){ setVisibility(View.INVISIBLE); } else{ setVisibility(View.VISIBLE); lastTime= new Time(); Handler.postDelay(3000); } Handler.handleMessage{ if(View.VISIBLE){ if(new Time()-lastTime>3S){ setVisibility(View.INVISIBLE); } } }

慕仙森

直接用 new Handler().postDelayed(new Runnable(){ @Override public void run(){ method() } }, 3000);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java