在listView之前调用onTouchEvent()

时间:2015-03-04 08:20:40

标签: android listview android-listview ontouchevent

在我的活动中,我有一个由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;
        }
    });

1 个答案:

答案 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方法进行检查。