Verschieben Sie ein Bild in kreisförmigen Pfad in android
Ich habe ein Bild, ich wollte, um es in kreisförmigen Pfad onClick()
- Ereignis der Schaltfläche, ohne animation,
Ich weiß nicht, wie es zu tun.. Hilfe??
Dies ist meine main Klasse
public class MainActivity extends Activity {
MyAnimation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
animation =new MyAnimation ();
}
und ich bin mithilfe von code, die Sie als
public class MyAnimation extends Animation {
float cx,cy,prevX,prevY,r;
@Override
protected void applyTransformation(float interpolatedTime, Transformation t) {
super.applyTransformation(interpolatedTime, t);
float angle = (float) (interpolatedTime * 2 * Math.PI);
//r = radius, cx and cy = center point, a = angle (radians)
float x = (float) (cx + r * Math.cos(angle)) ;
float y = (float) (cy + r * Math.sin(angle));
float dx = prevX - x;
float dy = prevY - y;
prevX = x;
prevY = y;
t.getMatrix().setTranslate(dx, dy);
}
}
Und das ist mein xml-Code des Bildes, das ich mich bewegen wollte, in Runder Form.
<ImageView
android:id="@+id/myanimation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/ic_launcher" />
- Wenn Sie möchten, manuell drehen Sie die Ansicht - stackoverflow.com/a/34898135/4440874
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, Sie haben hier zwei Optionen: entweder Sie erstellen eine benutzerdefinierte animation, oder du erstellst deine Bildansicht und dann eine Oberfläche, um es zu zeichnen, die entlang des Pfades selbst.
Die erste option ist viel einfacher und wahrscheinlich bessere Ergebnisse erzielen, da in der Animation Klasse, das timing ist für Sie verarbeitet mit
Interpolators
(Lineare Zeit, starten Sie schnell, Ende normal, etc). Ich raten Ihnen zum schreiben der benutzerdefinierten animation, so sehe ich nicht, warum Sie würde nicht wollen, verwenden Sie die Animation-Klasse (animiert eine Bild ist genau das, was Sie wollen).Bearbeiten: ich nahm mir Zeit und implementiert die folgenden. Es ist nicht makellos, aber sieht das Bild animiert in einem kreisförmigen Pfad.
Aktivität:
Animation Klasse:
XML-Layout:
Müssen Sie wahrscheinlich, um es zu optimieren, hier und da zu bekommen was Sie wollen genau, aber das kann eine Grundlage sein für, die.
if(interpolatedTime == 0)
gibt. Entfernen, dies könnte helfen. Andernfalls könnten Sie brauchen, um zu spielen mit derfillBefore
undfillAfter
Werte (vergessen Sie nichtfillEnabled
).applyTransformation()
aufrufen und drucken der interpolatedTime (es sollte gehen von 0 bis 100 für jede Wiederholung). Haben Sie entfernen dieif()
überprüfen? Wenn das nicht funktioniert, können Sie setzen einen breakpoint in deronDraw()
von der Bildansicht und überprüfen, wer nennt es (etwas Neuzeichnen des Bildes zwischen den Wiederholungen).onDraw()
wird automatisch aufgerufen, nachdemapplyTransformation()
. WenninterpolatedTime == 0
ist wahr, es wird nicht alles transformieren, so macht es Sinn, es geht wieder in die Mitte. Versuchen Sie, entfernen Sie diese zuerst.if (isClockwise) { x = (float) (cx + r * Math.cos(angleRad)); y = (float) (cy + r * Math.sin(angleRad)); } else { y = (float) (cx + r * Math.cos(angleRad)); x = (float) (cy + r * Math.sin(angleRad)); }
anim.setInterpolator(new LinearInterpolator());