1

私のプロジェクトの 1 つで、クリック ヒートマップのようなものを収集したいと考えています。Androidでこれを行う方法はありますか?

元のレイアウトの上に透明なレイアウトを追加し、そこをクリックして「ハイジャック」し、それを下のレイアウトに渡すことを考えていました。しかし、私はそれを理解することはできません。

それで、これを行う方法についてのアイデアはありますか?

4

2 に答える 2

1

私は自分で解決策を見つけました。それはonInterceptTouchEvent()機能にあります。これをオーバーライドして、子ビューに渡される前にすべてのタッチ イベントをインターセプトできます。だから私はFrameLayoutを拡張するレイアウトを作成しました。私のレイアウトをこのレイアウトで囲みました。それだけです:)

于 2011-01-01T16:52:16.123 に答える
0

特定のビューがクリックされた回数をキャプチャしたいだけですか? それとも、タッチの正確なピクセル座標が必要ですか? 前者の場合は、それぞれの onTouchListener をオーバーライドして、そのビューのカウンターをインクリメントできます。

後者については、onTouchListener を少しいじって動作させることができましたが、おそらくすべてのビューに onTouchListener を設定する必要があります。これは大したことではなく、維持するものです。誰かがより良い方法を持っていない限り、心に留めておいてください。

Vector2D.java

public class Vector2D {
    private float x;
    private float y;

    public Vector2D(float x, float y) {
        this.x = x;
        this.y = y;
    }

    public void setX(float x) {
        this.x = x;
    }

    public float getX() {
        return this.x;
    }

    public void setY(float y) {
        this.y = y;
    }

    public float getY() {
        return this.y;
    }
}

Main.java

public class Main extends Activity implements OnTouchListener {
    /** Called when the activity is first created. 
     * @return */

    //defined as class variable so it's accessible from onTouch()
    List<Vector2D> points;

    @Override
    public boolean onTouch(View v, MotionEvent event) {
        //adds a new coordinate to the list, 
        //with the X and Y values of the touch
        points.add(new Vector2D(event.getX(), event.getY()));
        Log.d("TOUCH", "X:" + event.getX() + " Y:" + event.getY());
        return true;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.test);     

        points = new ArrayList<Vector2D>();       
        final LinearLayout ll = (LinearLayout)findViewById(R.id.linearlayout);
        final TextView pointsList = (TextView)findViewById(R.id.points_list);
        ll.setOnTouchListener(this);
        final Button listPoints = (Button)findViewById(R.id.list_points);
        listPoints.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                StringBuilder sb = new StringBuilder();
                for (Vector2D vector : points) {
                    sb.append(
                        "X:" +vector.getX() + " " + 
                        "Y:" + vector.getY() + "\n");
                }
                pointsList.setText(sb.toString());
            }
        });
    }
}
于 2010-12-27T18:02:44.440 に答える