私は最終的に試行錯誤の約1週間後にマルチタッチを有効にする方法を考え出しました。しかし私は別の問題に遭遇しました。まず、私のアプリについて説明しましょう。異なるタッチイベントごとに異なる応答
これはかなり基本的なアプリです。画面のAREA_Aにタッチすると、SOUND_Aが再生されます。画面のAREA_Bにタッチすると、SOUND_Bが再生されます。ものすごく単純。これをマルチタッチで動作させたいので、OnTouchイベントを使用しました。私は今、画面上のAREA_AとAREA_Bに同時に触れることができ、両方の領域から音を出すことができます(マルチタッチが機能していることを証明します)が、ここに問題があります。 AREA_Aに触れ始めてそこに指を置くと、AREA_Bに触れます(最初の指がまだAREA_Aに触れている)、SOUND_Bの音ではなく、SOUND_Aの音が聞こえます。なぜこれが起こっているのか、私は困惑しています。私はコードを貼り付けると事がより明確になると思うので、ここにあります。 (クラス全体を追加したので、最初から最後まで調べることができました)
package com.tst.tanner;
import android.app.Activity;
import android.graphics.Color;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
public class sp extends Activity implements OnTouchListener {
private SoundPool soundPool;
private int bdsound, sdsound;
float x, y;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Set the hardware buttons to control the music
this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
// Load the sound
View v = (View) findViewById(R.id.view1);
v.setOnTouchListener(this);
soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
bdsound = soundPool.load(this, R.raw.kickdrum1, 1);
sdsound = soundPool.load(this, R.raw.sd, 1);
}
@Override
public boolean onTouch(View v, MotionEvent e) {
// TODO Auto-generated method stub
x = e.getX();
y = e.getY();
v.setBackgroundColor(Color.rgb(236,234,135));
switch (e.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
if (x > 1 & x < 200 & y > 1 & y < 200) {
soundPool.play(bdsound, 10, 10, 1, 0, 1);
}
if (x > 1 & x < 200 & y > 200 & y < 400) {
soundPool.play(sdsound, 10, 10, 1, 0, 1);
}
break;
case MotionEvent.ACTION_POINTER_1_DOWN:
if
(x > 1 & x < 200 & y > 1 & y < 200) {
soundPool.play(bdsound, 10, 10, 1, 0, 1);
}
if (x > 1 & x < 200 & y > 200 & y < 400) {
soundPool.play(sdsound, 10, 10, 1, 0, 1);
}
break;
case MotionEvent.ACTION_UP:
v.setBackgroundColor(Color.BLACK);
}
return true;
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
super.onPause();
soundPool.release();
finish();
}
}
私が間違っていることを知っている人はいますか?前もって感謝します!
ありがとう、これはうまくいきました! – Tanner