2012-12-26 9 views
15

eine ziehbar Arbeit gut wie dieses Alphaing:Wie man einen Drawable mit ObjectAnimator dreht?

if(mAlphaAnimation == null){ 
     mAlphaAnimation = ObjectAnimator.ofFloat(this, "alpha", 0.0f,1.0f).setDuration(TARGET_ANIM_ALPHA_DURATION); 
     mAlphaAnimation.setInterpolator(new AccelerateDecelerateInterpolator()); 
     mAlphaAnimation.setStartDelay(TARGET_ANIM_ALPHA_DELAY_BASE*power); 
     mAlphaAnimation.setRepeatCount(ValueAnimator.INFINITE); 
     mAlphaAnimation.setRepeatMode(ValueAnimator.REVERSE); 
     mAlphaAnimation.addUpdateListener(this); 
} 

Aber wenn ich wie unten ein ziehbar drehen will, es don Arbeit.

Jeder kann mir helfen, dieses Problem zu beheben, oder dies ist eine andere Möglichkeit zum Erstellen einer Rotation Zeichnungsanimation.

Es tut mir leid, mein schlechtes Englisch.

+0

Ich möchte einen Zeichenstatus durch Touch-Ereignis ändern, das Zeichen ist eine einzelne Zeichen-, nicht eine Zeichenliste. Ändern Sie z. B. einen Zeichen-Alpha-Wert entsprechend der Entfernung auf dem Bildschirm. Und diese Funktion ist beendet. Dann möchte ich eine ziehbare Richtung entsprechend dem beweglichen Winkel ändern. Mit anderen Worten: Drehen Sie das Zeichen entsprechend dem Winkel. Diese Zeichen werden aus derselben Sicht gezeichnet. Ich möchte wissen, ein ObjectAnimator-Objekt mit Rotationseigenschaft kann eine zeichnbare drehen oder nicht. vielleicht kann es sich drehen, weil eine Bildansicht eine Zeichnungsdatei, die im Hintergrund gezeichnet werden kann, drehen kann. – marine8888

+0

Mögliches Duplikat von [Android: Verwenden von ObjectAnimator zum Übersetzen einer Ansicht mit Bruchwerten der View-Dimension] (http://stackoverflow.com/questions/10854940/android-using-objectanimator-to-translate-a-view-with- Bruchteil-Werte-von-der) –

Antwort

13

Probieren Sie diese einfache Rotationsanimation für ein Bild aus.

ImageView imageview = (ImageView)findViewById(R.id.myimage); 
RotateAnimation rotate = new RotateAnimation(180, 360, Animation.RELATIVE_TO_SELF,  
0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 
    rotate.setDuration(500); 
imageview.startAnimation(rotate); 

Diese Antwort nur für einen aus Gründen der Frage ist, ist es richtig, dass klickbare Bereich wird anders sein als View ‚s aktuelle Position. Bitte überprüfen Sie diese Frage, um den anklickbaren Bereich richtig zu machen. Button is not clickable after TranslateAnimation

+0

Danke. aber ich möchte die Drawble nicht in eine andere Ansicht, wie ImageView und so weiter, sondern möchte sie in eine Unterklasse der Ansicht (NICHT ViewGroup) ziehen. – marine8888

+1

@ marine8888 Ich glaube, Sie haben sich geirrt, 'ImageView' ist einfach eine Unterklasse von' View' und nicht 'ViewGroup' (was wiederum eine Unterklasse von' View' ist). Sie könnten Ihre eigene Unterklasse von 'View' erstellen und das Zeichen auf eine Zeichenfläche rendern, dies würde jedoch den gleichen Job wie eine' ImageView' machen. –

47

Versuchen Sie stattdessen mit ObjectAnimator.

ImageView imageview = (ImageView)findViewById(R.id.image); 

ObjectAnimator imageViewObjectAnimator = ObjectAnimator.ofFloat(imageview , 
        "rotation", 0f, 360f); 
      imageViewObjectAnimator.setDuration(1000); // miliseconds 
      imageViewObjectAnimator.start(); 

EDIT Da diese Frage einige Aufmerksamkeit auf sich ziehen lassen Sie mich, warum ObjectAnimator anstelle anderer Transition Animateure

Die Sache zu verwenden, um zu erklären ObjectAnimator über die Verwendung ist, dass er sowohl den sichtbaren bewegt sich und die klickbaren Bereich des Elements, wenn Sie eine andere Animationsmethode verwenden, zum Beispiel Transition Animation oder andere Animatoren, und sagen wir, wenn Sie die Button von der linken unteren Ecke des Bildschirms nach oben links verschieben möchten, wird es nur das Sichtbare verschieben Bereich aber nicht der Button selbst, der anklickbare Bereich wird immer noch auf der vorherigen Position sein, in diesem Fall wird der anklickbare Bereich immer noch links unten sein, anstatt oben links, wo Sie den Knopf bewegt haben.

Wenn Sie dasselbe mit ObjectAnimator machen, werden sowohl der sichtbare Bereich als auch der anklickbare Bereich den gewünschten Ort verschieben.