为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

杨魅力 2019-02-22 12:44:06
就是这个功能不知道怎么实现,就像很多视频播放器那种,如果点击屏幕任何,下方界面布局(显示按钮那些的)就显示出来,然后等几秒钟没有点击,就消失。先贴个代码: 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 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

不需要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;
            }
        });
查看完整回答
反对 回复 2019-03-01
?
哈士奇WWW

TA贡献1799条经验 获得超6个赞

runOnUiThread

查看完整回答
反对 回复 2019-03-01
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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

查看完整回答
反对 回复 2019-03-01
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

试试使用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);
    }
  }
}
查看完整回答
反对 回复 2019-03-01
?
慕仙森

TA贡献1827条经验 获得超7个赞

直接用

new Handler().postDelayed(new Runnable(){
    @Override
    public void run(){
        method()
    }
}, 3000);
查看完整回答
反对 回复 2019-03-01
  • 6 回答
  • 0 关注
  • 659 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信