2016-05-16 2 views
0

Je voulais faire pivoter Rectangle de 360 ​​degrés en 10 secondes. Et aussi je veux lui appliquer une fréquence d'image différente, par exemple 5 fps, 10 fps etc. Mais peu importe ce que la fréquence d'image est, rectangle devrait tourner dans 10 secondes.Comment faire une animation basée sur le temps dans Android?

Alors s'il vous plaît dites-moi comment puis-je contrôler les fps de l'animation? Quelle méthode d'animation dois-je utiliser?

J'utilise la méthode suivante. Suggérez toute autre bonne méthode pour le faire. Merci d'avance.

public class Square extends View { 

private Rect rect; 
private Paint paint; 
float height1; 
float width1; 

public Square(Context context) 
{ 

super(context); 
DisplayMetrics displaymetrics = new DisplayMetrics(); 
((Activity)  getContext()).getWindowManager().getDefaultDisplay().getMetrics(displaymetrics); 
    int height = displaymetrics.heightPixels; 
int width = displaymetrics.widthPixels; 
height1=height; 
width1=width; 

Point cos = new Point(width/2,height/2); 
int left = cos.x-(200); 
int top = cos.y - 200; 
int right =cos.x+200; 
int bottom = cos.y+200; 

rect = new Rect(left,top,right,bottom); 

// create a rectangle that we'll draw late rect = new Rect(x, y, sideLength, sideLength); 

// create the Paint and set its color 
paint = new Paint(); 






} 


protected void onDraw(final Canvas canvas) { 


super.onDraw(canvas); 
    /* canvas.drawColor(Color.BLACK); 
    canvas.drawRect(rect, paint);*/ 
    //canvas.drawColor(Color.BLACK); 
    long time1 = System.nanoTime(); 
    paint.setStyle(Paint.Style.FILL); 
paint.setColor(Color.WHITE); 
canvas.drawRect(rect, paint); 


// border 
paint.setStyle(Paint.Style.STROKE); 
paint.setColor(Color.GREEN); 
canvas.drawRect(rect, paint); 

long ti = animate().getDuration(); 
String x = "hello"; 

//Log.e("Tag",x+ti); 

long lsttime = System.nanoTime(); 
double fps = 100000000.0/(lsttime - time1); 
animate().rotation(360).setDuration(10000).start(); 


String fpss = "" + fps; 
Log.e("Tag", fpss); 
} 

} 
+0

Montrez-nous ce que vous avez essayé jusqu'ici ?? –

Répondre

0
ObjectAnimator rotate = ObjectAnimator.ofFloat(YOUR_LAYOUT, View.ROTATION_Y, 0.0f, 90f, 180f, 360f); 
rotate .setDuration(10000); //10sec 
rotate .setInterpolator(new AccelerateDecelerateInterpolator()); 

Vous devez utiliser ObjectAnimator. Interpolator décrit la façon dont l'animation est faite, regardez youtube à toutes les possibilités.

+0

Comment puis-je contrôler Fps avec ceci? –

+0

cela n'a rien à voir avec FPS. Vous pouvez contrôler les changements dans le temps. FPS est Frames-par-seconde, vous ne devriez jamais changer la valeur par défaut, sauf si vous optimisez graphique pour un jeu compliqué –

+0

Mon temps est constant i.e 10 sec. Et j'utilise le canevas pour dessiner le rectangle et la méthode animate() pour le faire pivoter. –