
做一个视频播放器,想实现一个功能,如果3秒不点击屏幕任何,则下方一个界面布局(显示按钮那些的)自动消失。1.2k 次浏览
问题对人有帮助,内容完整,我也想知道答案0问题没有实际价值,缺少关键内容,没有改进余地
就是这个功能不知道怎么实现,就像很多视频播放器那种,如果点击屏幕任何,下方界面布局(显示按钮那些的)就显示出来,然后等几秒钟没有点击,就消失。
先贴个代码:
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,但是如果不加入其它线程视频播放器java版,又如何实现这个功能,不可能在器里面用一个延迟函数,如果在这3秒内又又一次触摸时间,那肯定是要刷新这个时间的啊。。的确没想到解决方法。。。

Micro_yuyu93
2017-03-02 提问
×评论支持部分 Markdown 语法:**bold**_italic_[link]()> 引用`code`-列表。
同时,被你 @ 的用户也会收到通知

6 个回答
答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问
已采纳
不需要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;
}
});
原文海1.3k
2017-03-02 更新
如果要支持编程语言语法高亮,则可以使用 gfm 扩展的基于 yaml 标记语言的 fenced code block 引用语法格式。extra markdown:扩展的 markdown 语法,增加了表格等元素,不一定都能支持。引用的区块内也可以使用其他的 markdown 语法,包括标题、列表、代码块等。
同时,被你 @ 的用户也会收到通知
答案对人有帮助视频播放器java版,有参考价值0答案没帮助,是错误的答案,答非所问

你在子线程操作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);
chuyao6.2k
2017-03-02 回答
如果要支持编程语言语法高亮,则可以使用 gfm 扩展的基于 yaml 标记语言的 fenced code block 引用语法格式。extra markdown:扩展的 markdown 语法,增加了表格等元素,不一定都能支持。引用的区块内也可以使用其他的 markdown 语法,包括标题、列表、代码块等。
同时,被你 @ 的用户也会收到通知
答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问
runOnUiThread

铲昶行52

2017-03-02 回答
如果要支持编程语言语法高亮,则可以使用 gfm 扩展的基于 yaml 标记语言的 fenced code block 引用语法格式。extra markdown:扩展的 markdown 语法,增加了表格等元素,不一定都能支持。引用的区块内也可以使用其他的 markdown 语法,包括标题、列表、代码块等。
同时,被你 @ 的用户也会收到通知
答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问
发一个延迟的handler去隐藏布局就可以了。在子线程操作UI会有意想不到的问题。

恩格斯的钥匙4
2017-03-02 回答
×评论支持部分 Markdown 语法:**bold**_italic_[link]()> 引用`code`-列表。
同时,被你 @ 的用户也会收到通知
答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问

试试使用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);
}
}
}
风云2.2k
2017-03-02 回答
×评论支持部分 Markdown 语法:**bold**_italic_[link]()> 引用`code`-列表。
同时,被你 @ 的用户也会收到通知
答案对人有帮助,有参考价值0答案没帮助,是错误的答案,答非所问
直接用
new Handler().postDelayed(new Runnable(){
@Override
public void run(){
method()
}
}, 3000);

Nathan9091
2017-03-02 更新
×评论支持部分 Markdown 语法:**bold**_italic_[link]()> 引用`code`-列表。
同时,被你 @ 的用户也会收到通知
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/bofangqi/article-118282-1.html
超级喜欢你