多くのボタンで動作するマルチタスク アプリを管理しようとしています。
この目的のために、私はこの機能を作りました:
public boolean isTouched(View view, MotionEvent event) {
boolean touched = false;
int count = event.getPointerCount();
int[] location = { 0, 0 };
view.getLocationOnScreen(location);
Point min = new Point(location[0], location[1]);
Point max = new Point(min.x + view.getWidth(), min.y + view.getHeight());
for (int i = 0; i < count; i++) {
int rawX = (int) event.getX(i);
int rawY = (int) event.getY(i);
if(rawX>=min.x && rawX<=max.x && rawY>=min.y && rawY<=max.y){
//Log.d("mylog", "***Found a view: " + v.getId());
touched = true;
if (event.getAction() == MotionEvent.ACTION_UP) touched = false;
}
}
return touched;
}
そして、onTouchEvent をインターセプトし、2 つの ImageView を管理するアクティビティの関数オーバーライド
@Override
public boolean onTouchEvent (MotionEvent event) {
if (isTouched(button1,event)) {
// it is pressed
if ((Integer)button1.getTag() == 0) { // but before wasn't pressed
mp1.start();
button1.setBackgroundResource(R.drawable.happy_on);
button1.setTag(1);
// start music 1
}
} else {
// it isn't pressed
if ((Integer)button1.getTag() == 1) { // and before it was pressed
mp1.stop();
try {
mp1.prepare();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
Log.e("hb","illegal state exception mp2") ;
mp1= MediaPlayer.create(getBaseContext(), R.raw.female01) ;
}
button1.setBackgroundResource(R.drawable.happy_off);
button1.setTag(0);
// stop music 1
}
}
if (isTouched(button2,event)) {
// it is pressed
if ((Integer)button2.getTag() == 0) { // but before wasn't pressed
mp2.start();
button2.setBackgroundResource(R.drawable.to_on);
button2.setTag(1);
// start music 2
}
} else {
// it isn't pressed
if ((Integer)button2.getTag() == 1) { // and before it was pressed
mp2.stop();
try {
mp2.prepare();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalStateException e) {
Log.e("hb","illegal state exception mp2") ;
mp2= MediaPlayer.create(getBaseContext(), R.raw.female02) ; }
button2.setBackgroundResource(R.drawable.to_off);
button2.setTag(0);
// stop music 1
}
}
return false;
}
ボタン (私は imageview を使用) はピアノの鍵盤のように押されます: 1 本、2 本の指でそれを渡すことができ、ポインターがビューに入ると非同期アクションが開始されます。event_up またはポインターがボタンを離れると、アクションが停止します。
これは機能しますが、非常に遅い方法です。多くの action_move イベントが殺到します。
マルチタッチ管理のこの方法を最適化する方法を知っている人はいますか?
編集: mp1 と mp2 は mp3 mediaplayer オブジェクトです。ポインターを離さずにボタンから別のボタンに渡すと機能しますが、メロディーがジャンプする数ミリ秒のギャップがあります。私が作りたい効果は、ピアノの鍵盤のような、隙間のないものです。
機能の重みでズレが生じると思いますが触れました。この体重を減らすにはどうすればよいですか?
ありがとうございました