Вопрос

В одном из моих проектов я хочу собрать что -то вроде тепловой карты. Есть ли способ сделать это в Android?

Я думал о добавлении прозрачной макета над исходной макетой, а затем щелкнет «угон», а затем передать его в базовую макет. Но я не могу понять это.

Итак, какие -нибудь идеи о том, как это сделать?

Это было полезно?

Решение

Я только что нашел решение сам. Он лежит в onInterceptTouchEvent() функция Вы можете переопределить его, чтобы перехватить все события Touch, прежде чем быть переданным взглядам на ребенка. Поэтому я создал макет, расширяющий Framelayout. Окружил мой макет этим макетом, и это все :)

Другие советы

Вы просто хотите запечатлеть, сколько раз нажимается конкретный вид? Или вам нужны точные пиксельные координаты прикосновения? Если первое, вы можете просто переопределить онташлисенер для каждого из них и увеличить счетчик для этой точки зрения.

Что касается последнего, я немного разыграл с помощью 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());
            }
        });
    }
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top