Как мога да внедря повече видове докосвания до ImageButtons в Android?

Така че имам основно линейно оформление, което се състои от 6 ImageButton елемента, които се простират върху целия екран в мрежа 2x3. Искам да направя приложение, което работи по следния начин:

*1)*ако някой от бутоните ImageButton бъде щракнат кратко, той ще започне друга дейност

*2)*ако потребителят държи пръста си на екрана, той възпроизвежда звук в зависимост от това на кой от бутоните ImageButton е пръстът (така че 6 различни звука)...ако той движи пръста си (все още докосване на екрана) към друг ImageButton, той ще възпроизведе друг звук (всичко това без да вдига пръста си)...и накрая, когато пръстът се вдигне нагоре, той ще започне дейността според елемента, където пръстът е бил вдигнат.

Въпросът ми е какъв подход да избера, за да направя това? Клас MotionEvent? Защото само onClick() на OnClickListener няма да е достатъчно IMHO. Благодаря


person turor    schedule 23.03.2014    source източник


Отговори (1)


Мисля, че очаквате две различни функции за едно и също изображение, но можете да постигнете тази концепция, като използвате Щракване и продължително натискане Не можете да постигнете с едно докосване Ще ви предложа да използвате това дълго натискане и едно щракване Пример за този проблем е... ..Ще обясня за единичния бутон, вие ще го повторите за другите пет бутона....

 but.setOnTouchListener(new OnTouchListener() {         
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            detector = new GestureDetector(getApplicationContext(), new TouchDetector());

            return false;
        }
    });


 public class TouchDetector implements android.view.GestureDetector.OnGestureListener   {

    @Override
    public boolean onDown(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onLongPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onScroll(MotionEvent e1, MotionEvent e2,
            float distanceX, float distanceY) {
        // TODO Auto-generated method stub
        return false;
    }

    @Override
    public void onShowPress(MotionEvent e) {
        // TODO Auto-generated method stub

    }

    @Override
    public boolean onSingleTapUp(MotionEvent e) {
        // TODO Auto-generated method stub
        return false;
    }



}

Опитайте това за постигане на вашата логика, но това е проста логика, можете да използвате и тази логика

public class MainActivity extends Activity {
GestureDetector detector;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Button but1 = (Button) findViewById(R.id.button1);
    Button but2 = (Button) findViewById(R.id.button2);
    Button but3 = (Button) findViewById(R.id.button3);
    Button but4 = (Button) findViewById(R.id.button4);
    Button but5 = (Button) findViewById(R.id.button5);
    Button but6 = (Button) findViewById(R.id.button6);
    but1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            //Do here your Activity calling functions....
        }
    });

    but.setOnLongClickListener(new OnLongClickListener() {

        @Override
        public boolean onLongClick(View v) {
            //Do your sound Logic here
            return false;
        }
    });
// you just repeat this for all other Five buttons...        
}
}
person Naveen Kumar    schedule 23.03.2014
comment
Първо, благодаря ви за отговора. Мисля, че попитах нещо различно от това, което исках. Искам това: Ако потребител първо щракне върху ImageButton, той трябва да издаде звук. Но след това, ако той не пусне пръста си и продължи някъде другаде и след това пусне пръста си върху различен ImageButton, това трябва да направи събитие, свързано с последния ImageButton, а не с първия щракнат бутон. Опитвам се да постигна това, като използвам EventMotion.ACTION_DOWN и EventMotion.ACTION_UP, но ACTION_UP винаги е свързан с първия ImageButton, където беше извършено ACTION_DOWN. Някаква помощ? Благодаря! - person turor; 23.03.2014