Wie verschiebe ich eine Ansicht richtig?

Kann jemand einem Noob bitte erklären, wie man eine Ansicht korrekt animiert, damit sich der Touch-Bereich und das Bild tatsächlich zusammen bewegen ?!

Ich habe viele Beiträge, Fragen und Tutorials gelesen, aber keine erklärt, was das Layout und das Bild so bewegt, dass ich eine Ansicht animieren und an ihrer neuen Position belassen kann.

Dies ist eine Beispielmethode, mit der ich arbeite und viele verschiedene Kombinationen ohne Erfolg ausprobiere. Die Ansicht befindet sich im übergeordneten RelativeLayout. Es ist ein berührbares Menü mit Symbolen und wird mit einer XML-Ressource auf einem Klick animiert, um vom Bildschirm zu rutschen. Es wird nur ein kleiner Tab angezeigt, in dem es bleiben muss, bis es erneut angeklickt wird.

<code>public void RetractTools (View v){      
    final ImageView finalImage1 = (ImageView) findViewById(R.id.paintsView);
    Animation slideout = AnimationUtils.loadAnimation(this, R.anim.slideout_tools);
    slideout.setFillAfter(true);
    slideout.setAnimationListener(new AnimationListener() {
        @Override
        public void onAnimationEnd(Animation animation) {
            finalImage1.setEnabled(true);
            optionMenu.showing = false;
            optionMenu.inMotion = false;
            finalImage1.layout(1258, 668, 1697, 752);
            finalImage1.setRight(1280);
            finalImage1.invalidate();
        }

        @Override
        public void onAnimationRepeat(Animation arg0) {
        }

        @Override
        public void onAnimationStart(Animation arg0) {
            finalImage1.setEnabled(false);
        }
    });

    optionMenu.inMotion = true;
    v.startAnimation(slideout);
 }// End RetractMenu
</code>

Egal was ich versuche, ich stoße auf Probleme. setFillAfter führt nichts aus, wenn es in der XML-Datei festgelegt ist. Durch die programmgesteuerte Einstellung bleibt das Bild an der richtigen Stelle, die Touch-Steuerelemente bleiben jedoch dort, wo sich das Menü befand. Ich habe setLeft und setRight ausprobiert, die anscheinend nur das Bild, nicht die Ansichtsposition und alle möglichen unterschiedlichen Layoutoptionen verschieben und ausfüllen und nicht ausfüllen und ungültig machen und nicht, aber nicht lösen können. Ich verstehe die zugrunde liegende Mechanik, die zum Positionieren und Rendern einer Ansicht erforderlich ist, eindeutig nicht! : D

Vielen Dank.

EDIT: Lösung

Bei ähnlichen Problemen habe ich festgestellt, dass dies mit relativen Layouts funktioniert. Sie erstellen ein LayoutParams-Objekt mit der angegebenen Größe und können es anschließend positionieren. z.B.

<code>    final RelativeLayout.LayoutParams position = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);           
    position.leftMargin = 440;
</code>

Weisen Sie das dann Ihrer Ansicht zu

<code>    myView.setLayoutParams(position);
</code>

Zusammenfassend verwenden Sie also ein LayoutParams-Objekt als Schnittstelle zur Position Ihrer Ansicht, anstatt wie angenommen direkt auf die Koordinaten der Ansicht zuzugreifen.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage