按钮 - 声音 - onHoverListener - 老虎

时间:2016-10-08 18:03:30

标签: android button audio onhover

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

  
      
  • 开始在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;

        }
    });
}

1 个答案:

答案 0 :(得分:0)

尝试以这种方式实施

要求您告诉系统您已经消耗了该事件并且对连续事件的消费感兴趣。这可以通过返回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.