2011-05-27 65 views
13

我AVE创建了一个路径一个圆,在屏幕上同时显示其中的原因如下:的Android移动对象

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); 
    } 

我想有沿路径圆动,我怎么能做到这一点?

回答

3

您需要将您的圈子稍微移动一点,朝向下一个航点,并检测一旦它到达那里,然后开始向下一个航点移动。没有我知道的内置系统。

15

是的,可以沿着路径移动图像。我将提供简单的解决方案来展示原理。以下代码将沿着路径为圆圈设置动画。

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 +:这会在路径上创建一个二次贝塞尔曲线,并沿着它创建动画myView。

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

下面是我用的是动画师:

用途:移动视图 “视图” 沿路径 “路径”

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

如何在每个轮廓后旋转我的视图。我有4分。我只需使用lineto创建路径。现在我想旋转我对这4点的看法。我怎样才能做到这一点? – pa1pal 2016-06-28 12:51:47