2

いくつ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" />

私の目的は、文字列ではない値ImageViewの中にあることに注意してください。gridViewImageView をアダプターに入力してから、リスナーを設定しようとしましたが、うまくいきませんでした。したがって、この質問の例として文字列値を使用しています。

どうすればこの問題を解決できますか?

4

1 に答える 1