0

我正在做一个fife应用程序。我的五官有 6 个孔,我认为它们是 6 个纽扣。如您所知,如果您一次握住一个、两个或多个孔(此处为按钮),则在法夫斯中会有所不同。我是android新手,我该如何管理它?例如,我想这样做:
如果同时触摸 button1 和 button2:如果同时触摸
button6 和 button2,则播放 sound1:
如果同时触摸 button1 和 button2 和 buuton3,则播放 sound2:播放 sound3

.
.
最后我使用了这个技巧:

one.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

            switch(event.getAction()){

            case MotionEvent.ACTION_DOWN:

                is1t = true;
                soundtoplay();
                one.setBackgroundResource(R.drawable.hintedholes);
                return true;

            case MotionEvent.ACTION_UP:

                is1t = false;
                soundtoplay();
                one.setBackgroundResource(R.drawable.holes);
                return true;

            }
            return false;
        }
    });

    two.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

            switch(event.getAction()){

            case MotionEvent.ACTION_DOWN:

                is2t = true;
                soundtoplay();
                two.setBackgroundResource(R.drawable.hintedholes);
                return true;

            case MotionEvent.ACTION_UP:

                is2t = false;
                soundtoplay();
                two.setBackgroundResource(R.drawable.holes);
                return true;

            }
            return false;
        }
    });

    three.setOnTouchListener(new OnTouchListener() {

        @Override
        public boolean onTouch(View v, MotionEvent event) {
            // TODO Auto-generated method stub

            switch(event.getAction()){

            case MotionEvent.ACTION_DOWN:

                is3t = true;
                soundtoplay();
                three.setBackgroundResource(R.drawable.hintedholes);
                return true;

            case MotionEvent.ACTION_UP:

                is3t = false;
                soundtoplay();
                three.setBackgroundResource(R.drawable.holes);
                return true;

            }
            return false;
        }
    });
...

public void soundtoplay(){

    if(is1t == true && is2t == false && is3t == false && is4t == false && is5t == false && is6t == false){


        mp = MediaPlayer.create(Playing.this, R.raw.b);
        mp.start();

    }else if(is1t == true && is2t == true && is3t == false && is4t == false && is5t == false && is6t == false){

        mp = MediaPlayer.create(Playing.this, R.raw.a);
        mp.start();

    }else if(is1t == true && is2t == true && is3t == true && is4t == false && is5t == false && is6t == false){

        mp = MediaPlayer.create(Playing.this, R.raw.g1);
        mp.start();

    }else if ...
4

3 回答 3

1

在 android 4.1+(我猜)中,您可以触发多个单次触摸而不做任何事情。但是,要支持低版本,可以使用普通的多点触控处理方式,处理不同的情况。看看这个

于 2013-07-13T12:33:41.423 回答
0

一种方法是设置onTouchListener按钮而不是设置onClickListener。这样,您不必每次单击按钮时都执行操作。
然后,您必须通过测量第一次单击和最后一次单击之间的时间并调节在此时间间隔内单击的按钮来处理同时触摸。

于 2013-07-13T13:44:29.867 回答
-1

请尝试使用以下代码。

公共类 MainActivity 扩展 Activity 实现 OnTouchListener

{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    findViewById(R.id.button1).setOnTouchListener(this);
    findViewById(R.id.button2).setOnTouchListener(this);
    findViewById(R.id.button3).setOnTouchListener(this);
    findViewById(R.id.button4).setOnTouchListener(this);
    findViewById(R.id.button5).setOnTouchListener(this);
    findViewById(R.id.button6).setOnTouchListener(this);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

public void onToch(View v) {
    // TODO Auto-generated method stub
    switch (v.getId()) {
    case R.id.button1:
        Log.d("TAG", "button1 click");
        break;
    case R.id.button2:
        Log.d("TAG", "button2 click");
        break;
    case R.id.button3:
        Log.d("TAG", "button3 click");
        break;
    case R.id.button4:
        Log.d("TAG", "button4 click");
        break;
    case R.id.button5:
        Log.d("TAG", "button5 click");
        break;
    case R.id.button6:
        Log.d("TAG", "button6 click");
        break;

    default:
        break;
    }
}

}

于 2013-07-13T10:34:57.683 回答