【问题标题】:How do I play a sound when ever the screen is touched? [closed]触摸屏幕时如何播放声音? [关闭]
【发布时间】:2019-05-23 12:06:38
【问题描述】:

我正在尝试制作一个类似飞鸟的游戏。但是,我一直在努力寻找一种在触摸屏幕时播放流行声音的方法。

我希望它在每次触摸屏幕时播放声音。我是 Android 和 Android Studio 的新手,我对 Java 有非常基本的了解。如您所见,我是新手。

我尝试过制作MediaPlayer,但我不知道如何让它在触摸屏幕时播放。

【问题讨论】:

  • 你看过docs一次吗?

标签: java android


【解决方案1】:

SoundPoolOnTouchListener 结合使用。在您的 onTouch(..) 方法中,您只需执行 SoundPool.play(YOURAUDIOFILE, 1, 1, 1, 0, 1);

例如:

your_app/res/ 下创建一个名为 raw 的文件夹。然后将您的铃声粘贴到此文件夹中,例如your_app/res/ringtone.mp3。现在使用以下代码:

SoundPool soundPool = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);

// soundId for reuse later on
int soundId = soundPool.load(context, R.raw.ringtone, 1);

soundPool.play(soundId, 1, 1, 0, 0, 1);

使用后务必释放 SoundPool 资源:

soundPool.release();
soundPool = null;

【讨论】:

    【解决方案2】:

    您好,欢迎来到 Stackoverflow

    要检测触摸事件首先你必须创建一个 TouchWrapper 类,你可以尝试更多的事件,但我相信这会对你有所帮助,只需将 println 替换为你想要播放的声音

    class TouchableWrapper(context: Context) : FrameLayout(context) {
        override fun dispatchTouchEvent(event: MotionEvent): Boolean {
            when (event.action) {
                MotionEvent.ACTION_DOWN -> println("Moved")
                MotionEvent.ACTION_SCROLL -> println("Scrolled")
            }
            return super.dispatchTouchEvent(event)
        }
    }
    

    当你创建它时,在你的布局文件中,将整个视图包装在一个 FrameLayout 中

    <FrameLayout
            android:id="@+id/frameMap"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="parent">
    
                <fragment
                    android:id="@+id/map"
                    android:name="com.google.android.gms.maps.SupportMapFragment"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"/>
    </FrameLayout>
    

    最后在你的课堂上,发送这个

    var mTouchView: TouchableWrapper? = null
    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
        val frameLayout = FrameLayout(context)
        Fonty.Companion.setFonts(container)
        populateViewForOrientation(inflater, frameLayout)
        mTouchView = TouchableWrapper(this.context!!)
        mTouchView!!.addView(frameLayout)
        return mTouchView
    }
    

    【讨论】:

      猜你喜欢
      • 2016-10-26
      • 1970-01-01
      • 2020-07-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多