Déplacer une Image dans la trajectoire circulaire dans android
Je vais avoir une Image, j'ai voulu la déplacer dans le chemin circulaire onClick()
événement de bouton sans animation,
Je ne sais pas comment faire.. une aide??
C'est ma classe principale
public class MainActivity extends Activity {
MyAnimation animation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
animation =new MyAnimation ();
}
et je suis en utilisant le code donné par vous comme
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);
}
}
Et c'est mon xml de l'image que j'ai voulu déplacer une forme circulaire.
<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" />
- Si vous souhaitez manuellement tourner la vue - stackoverflow.com/a/34898135/4440874
Vous devez vous connecter pour publier un commentaire.
Je pense que vous avez deux options: soit vous créez une animation personnalisée, ou vous créez votre ImageView et ensuite utiliser une surface de dessiner le long du chemin vous-même.
La première option est beaucoup plus facile, et donnera probablement de meilleurs résultats étant donné que dans l'Animation de la classe, le calendrier est fait pour vous avec
Interpolators
(temps Linéaire, démarrage rapide, fin, normal, etc). Je conseille fortement de passer le personnaliser l'animation, comme je ne vois pas pourquoi vous ne voulez pas utiliser l'Animation de la classe (l'animation de l'image est exactement ce que vous voulez).Modifier: j'ai pris un peu de temps et mis en œuvre le suivant. C'est pas impeccable, mais ne animer l'image dans une trajectoire circulaire.
Activité:
De l'Animation de la classe:
XML Mise en page:
Vous avez probablement besoin de tordre ici et là pour obtenir ce que vous voulez exactement, mais ce peut être une base pour qui.
if(interpolatedTime == 0)
qui retourne. La suppression de ce qui pourrait aider. Sinon, vous pourriez avoir besoin de jouer avec lesfillBefore
etfillAfter
valeurs (n'oubliez pasfillEnabled
).applyTransformation()
appel et imprimer le interpolatedTime (il devrait aller de 0 à 100, pour chaque répétition). Avez-vous retirer laif()
vérifier? Si cela ne fonctionne pas, vous pouvez mettre un point d'arrêt dans leonDraw()
de l'ImageView et de vérifier qui l'appelle (quelque chose est en train de redessiner l'image entre les répétitions).onDraw()
est appelée automatiquement aprèsapplyTransformation()
. SiinterpolatedTime == 0
est vrai, il ne va pas transformer n'importe quoi, donc il est logique qu'il remonte vers le centre. Essayer d'enlever cette première.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());