2016-05-04 23 views
2

Ich habe einen Vektor-Zeichensatz, den ich je nach Eingabe in meiner App drehen möchte.Wie programmiere ich einen Gruppenparameter von Vector Drawable programmgesteuert?

Ich habe einen vector_drawable.xml

<vector xmlns:android="http://schemas.android.com/apk/res/android" 
    android:width="100dp" 
    android:height="100dp" 
    android:viewportWidth="100" 
    android:viewportHeight="100"> 

    <group 
     android:name="rotation_group" 
     android:pivotX="50" 
     android:pivotY="50" 
     android:rotation="180" > 
     <path 
      android:pathData="..." 
      android:fillColor="#ffffff"/> 
     <path 
      android:pathData="..." 
      android:fillColor="#ffffff"/> 
    </group> 

    <path 
     android:pathData="..." 
     android:fillColor="#242424"/> 
</vector> 

In meinem Code, erstelle ich ein ValueAnimator

ValueAnimator animator = ObjectAnimator.ofInt(myDrawable, "rotate", 0, 360); 
animator.setDuration(500); 
animator.addUpdateListener(animatorUpdateListener); 
animator.start(); 

Mit animatorUpdateListener wie folgt definiert sind:

animatorUpdateListener = new AnimatorUpdateListener() { 
    @Override 
    public void onAnimationUpdate(ValueAnimator valueAnimator) { 
    int angle = (int) valueAnimator.getAnimatedValue("rotate"); 
    myAngle = angle; 
    myView.invalidate(); 
    } 
}; 

In meinem OnDraw-Methode Ich rufe dann

canvase.save(Canvas.MATRIX_SAVE_FLAG); 
canvas.rotate(myAngle); 
myDrawable.draw(canvas); 
canvas.restore(); 

Wie würde ich in der Lage sein, den android:rotation Parameter innerhalb der rotation_group meiner vector_drawable.xml zu ändern, anstatt die Leinwand zu drehen?

Vielen Dank!

Antwort

0

Sie können nicht. Es gibt keine Möglichkeit, die XML-Quelldefinition im laufenden Betrieb zu ändern. AnimatedVectorDrawable kann den android:rotation Parameter effektiv ändern, aber nur zu vordefinierten Werten scheint es, nicht programmgesteuert.

Eine alternative Lösung ist das Drehen der Canvas beim Zeichnen, wie Sie es gerade tun.

Oder wickeln Sie vielleicht Ihre VectorDrawable in eine RotateDrawable und zeichnen Sie stattdessen.

Oder setRotation auf die gesamte Ansicht.

Verwandte Themen