Android: кажется, не может правильно использовать MotionEvent.ACTION_MOVE - PullRequest
7 голосов
/ 08 июня 2011

Я довольно новичок в программировании Android и Java (хотя у меня есть некоторый опыт работы с C #, так что это помогает).

В этот момент я бездельничаю с парой вещей, чтобы узнать, как все работает. Я сделал действие, которое реализует onTouchListener. Я переопределил onTouch и включил event.getAction ():

public boolean onTouch(View v, MotionEvent event) 
{
    float x; 
    float y;    

    switch (event.getAction())
    {
        case MotionEvent.ACTION_DOWN: // gets called
        {
            x = event.getX();
            y = event.getY();   
            circle c = new circle(this, x, y, 10, 0xFFFFFF);
            _main.addView(c, tapCount++);
            break;
        }
        case MotionEvent.ACTION_MOVE: // doesnt seem to do anything
        {
            x = event.getX();
            y = event.getY();
            circle c = new circle(this, x, y, 10, 0xFFFFFF);
            _main.addView(c, tapCount++);
            break;
        }
    }
    return false;
}

Где "круг" - это класс, рисующий круг.

То, что я ожидал увидеть, было следом кругов, когда я провел пальцем по экрану. Вместо этого круг рисуется только тогда, когда я начинаю касаться.

Я сравнил свой код с примерами (например: этот пост от Google: http://android -developers.blogspot.com / 2010/06 / making-sense-of-multitouch.html ) и Я не могу найти свою ошибку.

EDIT: Ссылка на полный класс: http://pastebin.com/tVDQjQhu

EDIT: Исправлена. Необходимо вернуть true в функции onTouch (). d'ой!

Ответы [ 3 ]

41 голосов
/ 23 июня 2011

У меня была такая же проблема при использовании MotionEvent.ACTION_MOVE. Чтобы MotionEvent.ACTION_MOVE работал, верните true вместо false.

11 голосов
/ 17 июля 2012

Для меня Решение было

return true

в функции onTouch, так как вы должны использовать это

public boolean onTouch(View v, MotionEvent event){
float x; 
float y;    

switch (event.getAction())
{
    case MotionEvent.ACTION_DOWN: // gets called
    {
        x = event.getX();
        y = event.getY();   
        circle c = new circle(this, x, y, 10, 0xFFFFFF);
        _main.addView(c, tapCount++);
        break;
    }
    case MotionEvent.ACTION_MOVE: // doesnt seem to do anything
    {
        x = event.getX();
        y = event.getY();
        circle c = new circle(this, x, y, 10, 0xFFFFFF);
        _main.addView(c, tapCount++);
        break;
    }
}
return true; //the problem was here

}

при возврате false из onTouch (View v, Событие MotionEvent), тогда будет вызван только MotionEvent.ACTION_DOWN.поэтому вы должны вернуть true из этой функции

Надеюсь, это поможет

1 голос
/ 14 февраля 2012

У меня были те же проблемы, я не знаю, является ли это ошибкой или нет, но мне удалось заставить ее работать, добавив OnClickListener к реализации и внедрив public void onClick(View v), а затем добавив setOnClickListener(this) наконструктор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...