2015-03-04 2 views
2

В моей деятельности у меня есть ListView, который заполнен ArrayList, и он реализует Android MediaPlayerControl.Вызовите onTouchEvent() перед listView

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; 
} 

EDIT: Это после того, как я попытался, что Маркус предложил

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

Я думаю, вы можете установить 'id' на свой макет, а затем установить' OnTouchListener' в свой макет приложения enitre. – Marcus

+0

@ Маркус - ты дал мне представление, но я боюсь, что это не сработало. Я создал новый метод pubic void showControls (View view) {controller.show()} и создал атрибут onClick в моем RelativeLayout. Возможно, мне нужно вместо этого добавить onClick? Тем не менее мои ограниченные знания об Android затормозили меня. Я буду исследовать, как реализовать OnTouchListener. Благодарим за ваше предложение. – user43633

+0

Я добавил ответ, который даст вам подсказку о том, как делать то, что вы описали. Попробуйте и дайте мне знать! – Marcus

ответ

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 
    } 
}); 

Для решения «игнорирует последующие события, пока позже 3000ms», вам нужно будет следить времени как-то. Вы можете получить текущее время с System.currentTimeMillis();, сохраните это значение, затем проверьте его в методе onTouch.

+0

Спасибо, я попробовал это, как вы предложили, но я до сих пор не добился успеха. Я также сравнил заметки с этим ответом http://stackoverflow.com/questions/11180879/ontouchlistener-doesnt-work-with-relative-layout. Я редактировал свой оригинальный вопрос с кодом, поэтому вы можете видеть, что я сделал. – user43633

Смежные вопросы