#android #media-player #onhover
#Android #медиаплеер #onhover
Вопрос:
Я бы хотел, чтобы моя кнопка (должна ли это быть кнопка или что-то еще?) воспроизводила музыку при наведении на нее и останавливалась на HOVER_EXIT. Что я должен реализовать case MotionEvent.ACTION_HOVER_MOVE:
, чтобы кнопка воспроизводила музыку по-прежнему, без пауз от ENTER
EXIT
и MOVE
до, ничего не делая? Существует также ошибка — когда я пытаюсь открыть экран с помощью этой кнопки, приложение вылетает и выключается. Вот мой java-код:
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
public class DisplayActivity extends AppCompatActivity {
Button b1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen);
b1 = (Button)findViewById(R.id.button1);
b1.setOnHoverListener(new View.OnHoverListener()
{
@Override
public boolean onHover(View v, MotionEvent event) {
MediaPlayer player=MediaPlayer.create(DisplayActivity.this,R.raw.sound);
switch (event.getAction()) {
case MotionEvent.ACTION_HOVER_ENTER:
player.start();
break;
case MotionEvent.ACTION_HOVER_EXIT:
player.stop();
break;
}
return true;
}
});}`
Комментарии:
1. Не могли бы вы поделиться
logcat
?2. Вот строка ошибки:
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.android.appname/com.example.android.appname.DisplayActivity}: java.lang.ClassCastException: android.support.v7.widget.AppCompatButton cannot be cast to android.widget.ImageView
3. Похоже, где-то в вашем коде вы пытаетесь назначить ссылку
Button
наImageView
. Завершен ли код, упомянутый в вопросе?4. @user3161880 Теперь все работает правильно, но когда я нажимаю на свою кнопку, музыка не воспроизводится: ( У вас есть какие-нибудь идеи о том, как это исправить?
Ответ №1:
public class DisplayActivity extends AppCompatActivity {
private MediaPlayer player;
@Override
protected void onResume() {
super.onResume();
// create media player only when required
player = MediaPlayer.create(this, R.raw.sound);
// this will keep the audio playing, even if you hover for long time
player.setLooping(true);
}
@Override
protected void onPause() {
super.onPause();
// release is as soon as possible
player.release();
player = null;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screen);
findViewById(R.id.button1).setOnHoverListener(new View.OnHoverListener() {
@Override
public boolean onHover(
View v,
MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_HOVER_ENTER:
player.start();
break;
case MotionEvent.ACTION_HOVER_EXIT:
// if you choose to stop the player, you need to prepare it again by calling player.prepare(); before restarting it.
// I chose to pause it and seek it back to beginning
player.pause();
player.seekTo(0);
break;
}
return true;
}
});
}
}
Надеюсь, это поможет 🙂