我曾经有onTouchListener
,但我需要将其更改为onClickListener
因为我不想长时间触摸记录不同的值而不是短暂的触摸。在我的一行代码中,我有X[i]=Integer.valueOf((int)event.getX());
,它与onTouchListener
完美配合,但是onClickListener
,我得到了错误event cannot be resolved
。
我的问题是,event.getX()
是否有onClickListener
个功能?
以下是我的代码部分:
touchLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
X[i]=Integer.valueOf((int)event.getX());
}
});
}
提前致谢
答案 0 :(得分:10)
我很确定你无法获得点击x和y坐标,因为OnClick是一个由视图触摸监听器的内部实现触发的事件。当用户抬起手指并且移动距离不超过一定距离(称为触摸坡度)时触发。
另一方面,如果您实现自己的触摸侦听器,则可以检测触摸手势的开始和结束位置,并使用这些坐标执行您需要的任何操作。它看起来像这样:
view.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
startX = (int) event.getX();
startY = (int) event.getY();
}
if (event.getAction() == MotionEvent.ACTION_UP) {
int endX = (int) event.getX();
int endY = (int) event.getY();
int dX = Math.abs(endX - startX);
int dY = Math.abs(endY - startY);
if (Math.sqrt(Math.pow(dX, 2) + Math.pow(dY, 2)) <= touchSlop) {
// Your on click logic here...
return true;
}
}
return false;
}
});
此处的touchSlop变量保存在手势被视为滚动之前您可以移动多少。您可以通过调用ViewConfiguration.get(context).getScaledTouchSlop()来获取此值。
答案 1 :(得分:2)
您可能应该看一下,这可能会对您有所帮助:
@Override
public boolean onTouchEvent(MotionEvent event) {
int x = (int)event.getX();
int y = (int)event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_MOVE:
Log.i("222","X-"+x+"===Y="+y);
}
return false;
}
答案 2 :(得分:0)
你可以试试这个
public void onClick(View view) {
int[] values = new int[2];
view.getLocationOnScreen(values);
Log.d("X & Y",values[0]+" "+values[1]);
}
在方法
中 getLocationOnScreen(values);
你可以随心所欲。如果你的情况不适合,请告诉我