Как заставить что-то работать после двух кликов - PullRequest
1 голос
/ 26 мая 2011

Я пытаюсь создать приложение для Android, и мне нужно, чтобы программа получала одно (X, Y) значение для одной точки, а затем другое после другого щелчка, чтобы я мог провести линию между двумя точками что пользователь нажимает. Если есть лучший способ получить X, Y информацию, то я хотел бы знать. Спасибо.

final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
    @Override         
    public boolean onTouch(View v, MotionEvent event) { 
        String.valueOf(event.getX() + String.valueOf(event.getY()));
        double x = event.getX();
        double y = event.getY();
        return true;
    }
}); 

Ответы [ 2 ]

0 голосов
/ 26 мая 2011

Я бы сделал что-то вроде этого ...

public class MyActivity extends Activity
    implements View.OnTouchListener {

    int touchCount = 0;
    double startX, startY, endX, endY;
    View touchView = null;
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        // Set content view on the next line to whatever your
        // layout XML file is. For example main.xml
        setContentView(R.layout.main);
        touchView = findViewById(R.id.touchView);
        touchView.setOnTouchListener(this);
    }

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        if (v.equals(touchView)) {
            if (touchCount == 0) {
                startX = event.getX();
                startY = event.getY();
                touchCount++;
            }
            else {
                endX = event.getX();
                endY = event.getY();
                touchCount = 0;
                DrawLine();
            }
            return true;
        }
        return false;
    }

    private void DrawLine() {
        // Process the start / end X,Y points to draw a line here
    }
}
0 голосов
/ 26 мая 2011

Ваша функция для получения х и у выглядит хорошо. Что бы я сделал, просто вставил x и y координаты в глобальную переменную x1 и y1 , а затем во второй раз нажмите / коснитесь, поместите их в x2 и y2 , а затем вы проведете линию, когда у вас есть значения для ваших глобальных переменных ...

Вы можете сделать это с помощью оператора if или чего-то в этом роде. Если вам нужно больше двух точек, вы можете поместить все свои x и y координаты в массив и просто обновить представление, чтобы нарисовать линию между каждой новой точкой, добавленной в массив. ..

EDIT

Вот только отрывок, но вам нужна более чистая версия этого:

double x1 = null;
double y1 = null;
double x2 = null;
double y2 = null;

final View touchView = findViewById(R.id.touchView);
touchView.setOnTouchListener(new View.OnTouchListener() {
    @Override         
    public boolean onTouch(View v, MotionEvent event) { 
        String.valueOf(event.getX() + String.valueOf(event.getY()));
        if (x1 == null) {
            x1 = event.getX();
            y1 = event.getY();
        } else {
            x2 = event.getX();
            y2 = event.getY();
        }

        // draw a line between x1,y1 and x2,y2 here...

        return true;
    }
});

Чтобы еще раз упомянуть об этом ... Это действительно плохой код, который я написал там, я просто написал его, чтобы показать, что я имел в виду в своем ответе. Как только вы точно знаете, что вы хотите, и сколько точек и линий можно нарисовать, вы можете изменять и использовать массивы или все, что вам может понадобиться в вашей реализации.

Надеюсь, это поможет и прояснит мой ответ?

...