gpt4 book ai didi

android - 在 listView 之前调用 onTouchEvent()

转载 作者:行者123 更新时间:2023-12-02 04:50:46 25 4
gpt4 key购买 nike

在我的 Activity 中,我有一个由 ArrayList 填充的 ListView,它实现了 Android MediaPlayerControl。

MusicController 使用默认行为,因此它会在 3000 毫秒后消失,我希望能够在用户触摸屏幕一次时随时显示它。在用户触摸屏幕的那一刻,ListView 中的项目被选中。我只想调用 controller.show() 来代替。不幸的是,下面的代码不起作用。它只是激活在 ListView 中选择的任何项目。

我是否需要为我的 Activity 添加某种叠加层?我只想要某种“ super 触摸监听器”,它可以监听屏幕上任何位置的触摸事件,并使用 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;
}

编辑:这是在我尝试了 Marcus 的建议之后

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 fragment 。添加到 onCreate() 方法

//当用户触摸屏幕时显示控件

    RelativeLayout wholeScreen = (RelativeLayout) findViewById(R.id.wholeScreenLayout);
wholeScreen.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
controller.show();
return false;
}
});

最佳答案

您可以为您的应用程序布局添加一个 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
}
});

要解决“忽略后续事件直到 3000 毫秒后。”,您需要以某种方式跟踪时间。您可以使用 System.currentTimeMillis(); 获取当前时间,保存该值,然后在 onTouch 方法中检查它。

关于android - 在 listView 之前调用 onTouchEvent(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28849577/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com