获取gridview中触摸项的坐标

时间:2016-02-25 14:18:41

标签: android android-layout android-studio android-gridview android-touch-event

我有一个包含一些项目的MotionEvent.getRawX。我想在触摸网格中的任何项目时获取与屏幕相关的坐标。

我知道我可以使用MotionEvent.getRawYpublic 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; } }); } } 来做到这一点。问题是我不能在网格内的项目上设置触摸监听器,它不会触发,我不知道为什么。我尝试为gridview本身设置监听器,这是有效的,但是一旦我触摸任何项目,回调就会被多次调用(2-4次)。这是我的代码:

<?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" />

XML:

ImageView

请注意,我的目标是在gridView字符串值中包含[None, 100, 5, 50]。我尝试在适配器中填充ImageView,然后在其上设置监听器,但这并不起作用。所以,我只是使用字符串值作为这个问题的一个例子。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

更新onTouch方法,仅在用户的手指离开gridview时显示吐司(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。这取决于你

Doc是HERE

ACTION_DOWN - &gt;钥匙被按下了。

ACTION_MULTIPLE - &GT;您正在按下并通过屏幕滑动(此事件将被发送,直到用户释放屏幕)

ACTION_UP - &gt;钥匙已经发布。