Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从onClick更改为onTouch方法?_Java_Android - Fatal编程技术网

Java 如何从onClick更改为onTouch方法?

Java 如何从onClick更改为onTouch方法?,java,android,Java,Android,我正在创建音乐应用程序,我需要从onClick改为onTouch方法,这样我就可以在按下按钮的那一刻听到声音,而不仅仅是在松开按钮的时候。我不清楚我需要添加和更改什么 MainActivity.java: 活动\u主XML: 我试着从互联网上仿效了很多例子,但结果总是无效。步骤1:删除android:onClick属性,以便 <Button android:id="@+id/btn5" android:layout_width="76dp" android:layo

我正在创建音乐应用程序,我需要从onClick改为onTouch方法,这样我就可以在按下按钮的那一刻听到声音,而不仅仅是在松开按钮的时候。我不清楚我需要添加和更改什么

MainActivity.java:

活动\u主XML:


我试着从互联网上仿效了很多例子,但结果总是无效。

步骤1:删除android:onClick属性,以便

<Button
    android:id="@+id/btn5"
    android:layout_width="76dp"
    android:layout_height="69dp"
    android:background="@android:color/holo_red_dark"
    android:onClick="playD" />
首先用其中一个按钮尝试,当它工作时,继续下一个按钮

还有很多其他的方法,例如你可以删除这个方法

public void playD(View v){
    mSoundPool.play(btn5,1,1,0,0,1);
}
而是在onCreate中使用此选项:

findViewById(R.id.btn5).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction()==MotionEvent.ACTION_DOWN) mSoundPool.play(btn5,1,1,0,0,1);
        return false;
    }
});

@Pratik_Butani指出了哪一个更复杂,但稍后当您对其有了更多的了解时,可以查看。

欢迎来到StackOverflow!既然问题是关于Java/Android的,你能删除JavaScript标签吗?你需要把你的res/layout/activity_main.xml也发出来,先生@雅各布:你想改变什么?如果您有充分的理由,最好从XML中删除onClick并定义onTouchListener for all按钮。@PratikButani因为我想在按下按钮时播放声音,而不仅仅是在释放按钮时,onClick不允许我这样做。我尝试了你的建议,但现在显示android:onTouchListener是一个未知属性。很好,我使用了第一种方法,它可以工作!但现在我面临另一个问题,当按下按钮时,无休止的声音循环垃圾,当我释放按钮时,仍然会再次播放声音效果。我的目标是每次触球打1次。参见。要检查我是否按下、移动或释放动作,需要添加:if event.getAction==MotionEvent.action\u down。顺便说一句,如果你将来需要帮助,你应该接受答案,这样人们就会看到你重视他们的帮助
<Button
    android:id="@+id/btn5"
    android:layout_width="76dp"
    android:layout_height="69dp"
    android:background="@android:color/holo_red_dark" />
findViewById(R.id.btn5).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction()==MotionEvent.ACTION_DOWN) playD(v);
        return false;
    }
});
public void playD(View v){
    mSoundPool.play(btn5,1,1,0,0,1);
}
findViewById(R.id.btn5).setOnTouchListener(new View.OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction()==MotionEvent.ACTION_DOWN) mSoundPool.play(btn5,1,1,0,0,1);
        return false;
    }
});