【问题标题】:Button - sound - onHoverListener - tiger按钮 - 声音 - onHoverListener - 老虎
【发布时间】:2016-10-08 18:03:30
【问题描述】:

我需要做什么来制作我的按钮(或其他,请告诉我应该做什么 我用):

  • 开始在ACTION_HOVER_ENTER上播放音乐

  • ACTION_HOVER_MOVE继续玩(无需重置,什么都不做)

  • ACTION_HOVER_EXIT上停止播放并重置音乐

  • 当我从屏幕上的任何位置开始移动时开始工作,然后不释放hover enter我的按钮

  • 启动相同的活动没有问题,但由位于屏幕另一部分的另一个按钮触发 - 无需松开手指

我应该使用onHoverListener(),对吗?

如果可以的话,请写代码示例:)

这是我目前所拥有的:

package com.example.android.appname;

import android.content.Intent;
import android.graphics.Rect;
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;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

public class DisplayActivity extends AppCompatActivity {

ImageView b1;
MediaPlayer mPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_screen);
    b1 = (ImageView) findViewById(R.id.button2);
    b1.setOnHoverListener(new View.OnHoverListener() {


        @Override
        public boolean onHover(View v, MotionEvent event) {
            mPlayer = MediaPlayer.create(DisplayActivity.this, R.raw.sound);
            switch (event.getAction()) {


                case MotionEvent.ACTION_HOVER_ENTER:
                    if (mPlayer == null)
                        mPlayer.start();
                    break;

                case MotionEvent.ACTION_HOVER_MOVE:
                    break;

                case MotionEvent.ACTION_HOVER_EXIT:
                    mPlayer.release();
                    mPlayer = null;
                    break;
            }
            return false;

        }
    });
}

【问题讨论】:

  • 这里不是您要求人们为您编写代码的地方。我们在这里帮助那些努力尝试自己的人回答问题和解决问题。
  • 我只是在寻求帮助,因为我的代码写了很长时间,仍然无法正常工作,所以我决定在这个论坛上寻求建议。
  • 刚刚添加了我的工作,@mwieczorek

标签: android button audio onhover


【解决方案1】:

尝试以这种方式实现

这将要求您告诉系统您已经消费了该事件并且对连续事件的消费感兴趣。这可以通过返回true(表示感兴趣)、false(表示不感兴趣)来完成。

@Override
public boolean onHover(View v, MotionEvent event) {

    mPlayer = MediaPlayer.create(DisplayActivity.this, R.raw.sound);

    // Flag to indicate interest
    boolean consumable = false;

    switch (event.getAction()) {

        case MotionEvent.ACTION_HOVER_ENTER:
            if (mPlayer == null) {
                mPlayer.start();
                consumable = true;
            }
            break;

        case MotionEvent.ACTION_HOVER_MOVE:
            consumable = true;
            break;

        case MotionEvent.ACTION_HOVER_EXIT:
            mPlayer.release();
            mPlayer = null;
            consumable = true;
            break;
    }

    return consumable;
}

注:There might be Hardware Limitations to detect any Hover.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    相关资源
    最近更新 更多