Ich versuche, ein Bild in einer Android-Aktivität dynamisch zu erstellen und dann zu verschieben. Die Methoden setX() und setY() scheinen jedoch nicht korrekt zu funktionieren. Es legt die Position eines Bildes korrekt fest, wenn es erstellt und platziert wird, aber jeder Versuch, es zu aktualisieren, führt dazu, dass das Bild an der falschen Stelle platziert wird. Zum Beispiel bewegt sich das Bild auf dem folgenden Code:Android setX() und setY() verhält sich seltsam
ImageView image;
RelativeLayout layout = (RelativeLayout)findViewById(R.id.activity_this);
if(action == MotionEvent.ACTION_DOWN){
image = new ImageView(MyClass.this);
layout.addView(image, width, height);
image.setX(206);
image.setY(206);
}
else if(action == MotionEvent.ACTION_MOVE){
if(image != null){
image.setX(206);
image.setY(206);
}
}
Auf ACTION_MOVE wird das Bild bewegt, obwohl der x- und y-Positionswert gleich bleiben. Der Elternteil des Bildes bleibt gleich. Die Größe bleibt gleich. Wenn ich die x- und y-Werte erhalte, wird es immer noch 206 heißen, aber es wird nicht mehr bei (206, 206) auf der Aktivität platziert. Ich bin verloren, warum dies geschieht. Ich kann keinen Hinweis darauf finden, dass das Bild verändert wurde, außer dass es seinen Standort physisch ändert.
Tyvm für die Antwort. Params funktioniert für mich. Ich bin immer noch neugierig, was mit setX und Y los ist. Ich habe alles versucht, aber jedes Mal, wenn ich einen Wert festlege, nachdem er bereits im Ereignis down gesetzt wurde (egal wie ich den neuen Wert einstelle), wird das Bild an die falsche Stelle verschoben. Es ist durch einen konstanten Wert um 30 Pixel zu weit oben und links auf dem Emulator, mit dem ich gerade teste. Ich dachte, es müsste die Eltern der Ansicht ändern oder so etwas, aber das ist es nicht. Es gibt buchstäblich nichts anderes, was ich finden kann. – user2423199
Könnte es Dichte sein? Wenn Sie Zahlen programmatisch setzen, sollten Sie mit getResources() multiplizieren. GetDisplayMetrics(). Dichte, um px-Werte in dp-Werte zu ändern – marmor