我有一个包含一些项目的 gridview
。我想在触摸网格中的任何项目时获取屏幕相关坐标。
我知道我可以使用 MotionEvent.getRawX
和 MotionEvent.getRawY
来做到这一点。问题是我无法在网格内的项目上设置触摸监听器,它不触发,我不知道为什么。我试图为 gridview 本身设置监听器,这有效,但是一旦我触摸任何项目,回调就会被调用不止一次(2-4 次)。这是我的代码:
public class Calibration extends Activity {
List<String> list;
GridView grid;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.calibration_activity);
list = new ArrayList<String>();
grid = (GridView) findViewById(R.id.gridView1);
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
list.add("8");
list.add("9");
ArrayAdapter<String> adp = new ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_item_1line, list);
grid.setAdapter(adp);
/*Working but appears 2-4 times*/
grid.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
Toast.makeText(getBaseContext(), "( " + motionEvent.getRawX() + ", " + motionEvent.getRawY() + ")",
Toast.LENGTH_LONG).show();
return false;
}
});
}
}
XML:
<?xml version="1.0" encoding="utf-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:numColumns="auto_fit"
android:background="#7CFC00"
android:gravity="center"
android:columnWidth="100dp"
android:stretchMode="columnWidth" />
请注意,我的目标是在 gridView
中使用 ImageView
而不是字符串值。我尝试在适配器中填充 ImageView,然后在其上设置监听器,但这没有用。所以,我只是使用字符串值作为这个问题的示例。
我该如何解决这个问题?
最佳答案
更新您的 onTouch 方法以仅当用户的手指离开 gridview 时显示 toast (ACTION_UP)
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if(motionEvent.getAction() == KeyEvent.ACTION_UP) {
Toast.makeText(getBaseContext(), "( " + motionEvent.getRawX() + ", " + motionEvent.getRawY() + ")",
Toast.LENGTH_LONG).show();
return true;
}
else
return false;
}
您可以尝试检查其他 KeyEvent 条件,例如 ACTION_DOWN。这取决于你
文件是HERE
ACTION_DOWN
-> 按键已被按下。
ACTION_MULTIPLE
-> 您正在按下并滑动屏幕(发送此事件直到用户释放屏幕)
ACTION_UP
-> key 已被释放。
关于android - 获取 gridview 中触摸项目的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35629853/