2011-05-27 25 views
13

I AVE creado una ruta de un círculo y exhibidas tanto de ellos en la pantalla de la siguiente manera:Android objeto se mueva a lo largo de un camino

public void onDraw(Canvas canvas){ 

     Path sPath = new Path(); 
     sPath.moveTo(100, 100); 
     sPath.lineTo(300, 100); 
     sPath.lineTo(300, 300); 
     sPath.lineTo(100,300); 
     sPath.lineTo(100,100); 
     sPath.close(); 

     Paint ballPaint = new Paint(); 
     ballPaint.setColor(Color.GREEN); 
     Paint pathPaint = new Paint(); 
     pathPaint.setColor(Color.BLUE); 

     canvas.drawPath(sPath, ballPaint); 
     canvas.drawCircle(100,100,20,pathPaint); 
    } 

me gustaría tener el círculo se mueva a lo largo del camino, ¿Cómo puedo hacer esto ?

Respuesta

3

Tendría que mover su círculo un poco cada fotograma hacia el próximo punto de referencia y detectar una vez que llega, luego comenzar a avanzar hacia el siguiente. No hay un sistema integrado que yo sepa.

15

Sí, es posible mover imágenes a lo largo de la ruta. Proporcionaré una solución simple para mostrar el principio. El siguiente código animará el círculo a lo largo de la ruta.

int iCurStep = 0;// current animation step 

@Override 
protected void onDraw(Canvas canvas) { 
    PathMeasure pm = new PathMeasure(sPath, false); 
    float fSegmentLen = pm.getLength()/20;//we'll get 20 points from path to animate the circle 
    float afP[] = {0f, 0f}; 

    if (iCurStep <= 20) { 
     pm.getPosTan(fSegmentLen * iCurStep, afP, null); 
     canvas.drawCircle(afP[0],afP[1],20,pathPaint); 
     iCurStep++; 
     invalidate(); 
    } else { 
     iCurStep = 0; 
    }; 
}; 
5

v21 +: esto crea una curva de bezier cuadrática en una ruta y anima myView a lo largo de ella.

final Path path = new Path(); 
path.quadTo(controlX, controlY, finalX, finalY); 
ObjectAnimator.ofFloat(myView, View.X, View.Y, path).start(); 
11

Éstos son los animadores que utilizo:

Propósito: "vista" Mover Ver lo largo del camino "camino"

v21 +:

ValueAnimator pathAnimator = ObjectAnimator.ofFloat(view, "x", "y", path) 

v11 +:

ValueAnimator pathAnimator = ValueAnimator.ofFloat(0.0f, 1.0f); 

pathAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { 
float[] point = new float[2]; 

@Override 
    public void onAnimationUpdate(ValueAnimator animation) { 
     float val = animation.getAnimatedFraction(); 
     PathMeasure pathMeasure = new PathMeasure(path, true); 
     pathMeasure.getPosTan(pathMeasure.getLength() * val, point, null); 
     view.setX(point[0]); 
     view.setY(point[1]); 
    } 
}); 
+0

¿Cómo puedo rotar mi vista después de cada contorno? Tengo 4 puntos. Simplemente creo una ruta usando lineto. Ahora quiero rotar mi vista en cada uno de estos 4 puntos. ¿Cómo puedo hacer esto? – pa1pal

Cuestiones relacionadas