在我的活动中,我有一个由ArrayList填充的ListView,它实现了Android MediaPlayerControl。
MusicController正在使用默认行为,因此它在3000毫秒后消失,我希望能够在用户触摸屏幕一次时显示它。在用户触摸屏幕时,选择ListView中的项目。我想简单地调用controller.show()。不幸的是,下面的代码不起作用。它只是激活列表视图中选择的任何项目。
我是否需要在活动中添加某种叠加效果?我只是想要一些超级触控的听众"在屏幕上的任何地方侦听触摸事件,并使用controller.show()进行响应。
我已将此添加到我的MainActivity中:
import android.widget.MediaController.MediaPlayerControl;
import android.view.MotionEvent;
private MusicController controller;
@Override
public boolean onTouchEvent(MotionEvent event) {
//the MediaController will hide after 3 seconds - tap the screen to make it appear again
controller.show();
return false;
}
编辑:这是在我尝试了马库斯建议的之后
activity_main.xml中
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".MainActivity"
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:id="@+id/wholeScreenLayout">
<ListView
android:id="@+id/media_list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" >
</ListView>
mainActivity.java片段。添加到onCreate()方法
//当用户触摸屏幕显示控件时
RelativeLayout wholeScreen = (RelativeLayout) findViewById(R.id.wholeScreenLayout);
wholeScreen.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
controller.show();
return false;
}
});
答案 0 :(得分:0)
您可以为应用程序布局添加OnTouchListener
。在布局文件中,将其添加到根布局元素:
android:clickable="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:id="@+id/wholeScreenLayout"
然后添加监听器
//Assuming it's a RelativeLayout element
RelativeLayout yourRelativeLayout = (RelativeLayout) findViewById(R.id.wholeScreenLayout);
yourRelativeLayout.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View arg0, MotionEvent arg1) {
//Do your work here
return true;//always return true to consume event
}
});
要解决&#34;忽略后续事件直到3000毫秒。&#34;,你需要以某种方式跟踪时间。您可以使用System.currentTimeMillis();
获取当前时间,保存该值,然后使用onTouch
方法进行检查。