2016-11-19 4 views
0

Im mit dem folgenden Code erstellen, um die Ansicht zu animieren, wenn es gezogen wird ...kann nicht eine wachsende Ansicht

public class MyView extends View { 

    int iCurStep = 0;// current animation step 

    class Points { 
     float x, y; 

     Points(float _x, float _y) { 
      x = _x; 
      y = _y; 
     } 
    } 

    Points[] drawPaths = {new Points(-75, 0), new Points(20, 60), new Points(60, 20)}; 


    public MyView(Context context) { 
     super(context); 
    } 

    public MyView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 

    public MyView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @TargetApi(Build.VERSION_CODES.LOLLIPOP) 
    @Override 

    protected void onDraw(Canvas canvas) { 

     super.onDraw(canvas); 
     Paint paint = new Paint(); 
     paint.setColor(Color.GREEN); 
     paint.setStrokeWidth(2); 
     paint.setStyle(Paint.Style.STROKE); 

     Path  path  = new Path(); 
     PathMeasure pm   = new PathMeasure(path, false); 

     if (iCurStep <= 20) { 
      pm.getPosTan(fSegmentLen * iCurStep, afP, null); 
      path.moveTo(drawPaths[0].x, drawPaths[0].y); 
      for (int i = 1; i < drawPaths.length; i++) { 
       path.lineTo(drawPaths[i].y, drawPaths[i].y); 
      } 
      canvas.drawPath(path, paint); 
      iCurStep++; 
     } else { 
      iCurStep = 0; 
     } 
    } 
} 

Was Im erwartet, dass es eine wachsende Ansicht sein muss ... ich meine die Aussicht muss wachsen, während sie gezeichnet wird ... Aber ich kann das nicht produzieren ... Wie kann ich das herausfinden?

Antwort

1

Verwenden Sie eine ObjectAnimator.

Erstellen Sie Ihre Ansicht als normal, aber erstellen Sie dann eine ObjectAnimator (Dok: https://developer.android.com/reference/android/animation/ObjectAnimator.html). Sie werden so etwas in Ihrem Fragment oder Ihrer Aktivität tun (Sie können es auch in XML machen). Im Wesentlichen erstellen Sie einen ObjectAnimator für ein Objekt mit einer Eigenschaftszeichenfolge. Die Eigenschaftenzeichenfolge muss einen camelCase-Setter haben. Wenn Sie also die Eigenschaft view.setScaleX() aufrufen wollten, die Sie ändern wollten, müssten Sie die Eigenschaftsstring auf 'scaleX' setzen. Hier ist ein einfaches Beispiel.

View growMe = new View(args); 
float startSize = 1.0f; 
float endSize = 2.0f; 
ObjectAnimator grower = ObjectAnimator.ofFloat(growMe, "scaleX", startSize, endSize); 
int durationMs = 1000; 
grower.setDuration (durationMs) 
grower.start(); 

Die eine andere Sache, die Sie zu tun brauchen, ist eine AnimationListener zu Ihrer Ansicht hinzuzufügen, die tatsächlich die Größe passt als das richtige Ende der Animation zu sein (ich glaube - ich falsch auf sein könnte In diesem Teil wird die Ansicht nach dem Ende der Animation erneut skaliert.

Ich hoffe, dass hilft!

+0

können Sie bitte mit Bezug auf meinen Code erklären, weil es dem Pfad folgen muss –

+0

Ich bin mir nicht sicher, was Sie mit "wachsen" meinen. Sie möchten, dass die Ansicht "wächst" -75, 0? Bedeutet das, dass sich die Ansicht um 75 Pixel in der x-Richtung bewegt, die Ansicht um 75 Pixel in der x-Dimension schrumpft oder sich die linke Seite der Ansicht um 75 Pixel weiter nach links bewegt? – Eric

+0

nein .... ich meine die Ansicht muss von Null auf Voll –

Verwandte Themen