2014-08-29 1 views
6

Ich habe eine ImageView, die in einer Seite von ViewPager sitzt und nehme an, ich würde es animieren, zu verkleinern + irgendwo außerhalb des Bildschirms zu fliegen, während der Originalansicht ist immer noch in Pager, unberührt.Wie man eine 'geklonte', doppelte Version von bestehenden Android animieren View

Was ist der beste Weg, um diese Art von Animation auf Android 4.0.3 + zu erstellen? Ich möchte das neue Animationsframework verwenden, nicht das alte.

Ein Weg, dachte ich, ist die Aktivität der DecorView zu verwenden: einen Klon der ImageView dort erstellen und eine Animation zu tun, aber ich fühle mich wie das ein bisschen hacky ist - die Einrichtung Blick scheint eher wie ein verstecktes Feature und eine Implementierung Detail .

Gibt es vielleicht einen besseren Weg?

Antwort

2

Ich denke, Sie können mit einem DecorView umgehen, indem Sie setClipChildren() auf alle Eltern der ImageView auf false setzen. Dies ermöglicht Ihnen, ein View von Ihrem Layout auch außerhalb seiner Eltern (und sogar Activity) zu animieren. Ich verwende meist eine Hilfsmethode, dies zu tun:

public static void setClipView(View view, boolean clip) { 
    if (view != null) { 
     ViewParent parent = view.getParent(); 
     if(parent instanceof ViewGroup) { 
      ViewGroup viewGroup = (ViewGroup) view.getParent(); 
      viewGroup.setClipChildren(clip); 
      setClipView(viewGroup, clip); 
     } 
    } 
} 

So verwenden nur diese Methode auf das ImageView wie folgt aus:

LayoutHelper.setClipView(imageView, false); 

Um den View selbst animieren sollten Sie die neue Animation API mit Android eingeführt verwenden 3.0 (Honeycomb - API Level 11).

This DevBytes video ist auch etwas damit zu tun. Es handelt sich um benutzerdefinierte Activity Animationen und sie erstellen ein Duplikat ImageView, um den Übergang von einem Activity zum nächsten zu animieren. Das ist im Grunde das Gleiche, was Sie versuchen, nur in zwei verschiedenen Activities.

+0

Danke, aber es scheint, meine Frage war unklar. Ich möchte, dass eine ursprüngliche Ansicht unverändert angezeigt wird. I.e. eine Ansicht sitzt noch im Pager, während die Kopie außerhalb des Bildschirms fliegt. Wird die Frage anpassen, um dies ausdrücklich zu erwähnen. – dimsuz

+0

Sie müssen nur die gleiche 'Ansicht' erneut erstellen, zum Beispiel, wenn es ein 'ImageView' ist, fügen Sie dem Layout ein zweites 'ImageView' mit demselben Bild, Größe und Position hinzu und animieren Sie es dann einfach. Sie sind nicht einfacher als das. –

+0

[** Dieses DevBytes-Video **] (https://www.youtube.com/watch?v=CPxkoe2MraA) ist etwas damit verwandt, es handelt sich um benutzerdefinierte 'Activity'-Animationen und sie erzeugen ein Duplikat' ImageView' animiere den Übergang von einer Aktivität zur nächsten. Das ist im Grunde das Gleiche, was Sie versuchen, nur in zwei verschiedenen "Aktivitäten". –

Verwandte Themen