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

 罗帅飞1 发布于 2022-10-25 09:29

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

 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秒内又又一次触摸时间,那肯定是要刷新这个时间的啊。。的确没想到解决方法。。。

6 个回答
  • 直接用

    new Handler().postDelayed(new Runnable(){
        @Override
        public void run(){
            method()
        }
    }, 3000);
    2022-10-26 14:46 回答
  • 试试使用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);
        }
      }
    }
    2022-10-26 14:46 回答
  • 发一个延迟的handler去隐藏布局就可以了。在子线程操作UI会有意想不到的问题。

    2022-10-26 14:48 回答
  • runOnUiThread

    2022-10-26 14:48 回答
  • 你在子线程操作UI线程了,这是禁止的,加个handlder

           
    
    Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            linearLayout.setVisibility(View.VISIBLE);
        }
    };
               
    timer.schedule(new TimerTask() {
            @Override
            public void run() {
                 //linearLayout.setVisibility(View.VISIBLE);
                 mHandler.sendEmptyMessage(0);
            }
    },3000);
    2022-10-26 14:48 回答
  • 不需要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;
                }
            });
    2022-10-26 14:48 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有