我正在尝试为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;
}
});
答案 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
}
}