Как я могу реализовать больше типов прикосновений к ImageButtons в Android?

Итак, у меня есть базовый линейный макет, состоящий из 6 элементов ImageButton, которые растягиваются на весь экран в сетке 2x3. Я хочу сделать приложение, которое работает следующим образом:

*1)*если коротко щелкнуть любую кнопку ImageButton, она запустит другое действие

*2)*если пользователь держит палец на экране, он воспроизводит звук в зависимости от того, на какой из кнопок ImageButtons находится палец (таким образом, 6 разных звуков)... если он двигает пальцем (по-прежнему касаясь экрана) к другому ImageButton, он будет воспроизводить другой звук (все, не поднимая палец)... и, наконец, когда палец поднят вверх, он начнет действие в соответствии с элементом, где палец был поднят.

Мой вопрос в том, какой подход выбрать для этого? Класс MotionEvent? Потому что только onClick() OnClickListener будет недостаточно ИМХО. Спасибо


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