两次点击后如何使某些东西发挥作用

时间:2011-05-26 01:06:51

标签: android click double ontouchlistener

我正在尝试为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 :(得分:0)

你获得x和y的功能看起来没问题。我要做的只是在全局 x1 y1 变量中加入 x y 坐标,然后我第二次点击/触摸将它们放入 x2 y2 ,然后在您拥有全局变量值时绘制一条线...

你可以使用if语句或类似的东西来做到这一点。如果您需要两个以上的点,您可以将所有 x y 坐标放在一个数组中,然后更新视图以在每个新点之间绘制一条线。阵列...

修改

这里只是一个剪辑,但你需要一个更清晰的版本:

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;
    }
});

再次提到这一点......这是我在那里写的非常糟糕的代码,我只是写它来表明我在答案中的意思。一旦你确切知道你想要什么以及绘制多少点和线,你就可以修改和使用数组或你实现中可能需要的任何其他东西。

希望这会有所帮助,并清除我的答案?

答案 1 :(得分:0)

我会做这样的事......

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
    }
}