Möchten Sie nur erfassen, wie oft eine bestimmte Ansicht angeklickt wird? Oder wollen Sie die genauen Pixelkoordinaten der Berührung? Wenn Sie Ersteres sind, können Sie einfach den onTouchListener für jeden von ihnen überschreiben und einen Zähler für diese Ansicht erhöhen.
Für letztere, ich spielte ein bisschen mit einem onTouchListener, und war in der Lage, es zum Laufen zu bringen, aber Sie müssen wahrscheinlich einen onTouchListener zu jeder Ansicht setzen, was keine große Sache sein sollte, aber nur etwas zu beachten, es sei denn jemand hat einen besseren Weg.
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());
}
});
}
}
Versuchen Sie, dies für alle Aktivitäten zu tun? Oder nur deine Aktivität? Dies wird für andere Aktivitäten aus offensichtlichen Sicherheitsgründen nicht funktionieren. – Falmarri
Hallo zusammen, ich habe die Lösung selbst gefunden. Sie finden sie in der onInceptTouchEvent-Funktion. Sie können sie überschreiben, um alle Berührungsereignisse abzufangen, bevor sie an die untergeordneten Ansichten übergeben werden. Also habe ich ein Layout erstellt, das FrameLayout erweitert. Umgeben mein Layout mit diesem Layout und das ist es :) – Goddchen
Wenn Sie eine Antwort haben, sollten Sie es als Antwort, anstatt einen Kommentar posten. –