Android - угон щелкнет [закрыто
Вопрос
В одном из моих проектов я хочу собрать что -то вроде тепловой карты. Есть ли способ сделать это в 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());
}
});
}
}