2014-02-27 35 views
7

如何以編程方式給fromFegreestoDegreesandroid:color="#000000"RotateDrawable以編程方式在android

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > 
    <item > 


     <rotate 
      android:fromDegrees="45" 
      android:toDegrees="45" 
      android:pivotX="-40%" 
      android:pivotY="87%" > 

      <shape 
      android:shape="rectangle" > 
      <stroke android:color="@android:color/transparent" android:width="10dp"/> 
      <solid 
       android:color="#000000" /> 
     </shape> 

     </rotate> 
    </item> 
</layer-list> 

我在背景中使用這個xml。

我必須以編程方式創建三角形。所以需要以編程方式創建RotationDrawable。

回答

0

可以使用Matrix以編程方式旋轉圖像:

rotationMatrix = new Matrix(); 
// Set the scale type of your ImageView to "Matrix" 
yourImageView.setScaleType(ScaleType.MATRIX); 

// to set the rotation to a specific degree: 
rotationMatrix.setRotate(degrees); 
// or add some degrees to the current rotation 
rotationMatrix.postRotate(degrees); 

// apply matrix to your ImageView 
yourImageView.setImageMatrix(rotationMatrix); 
+0

是的,我可以,但我要創建三角形編程。所以我必須以編程方式創建rotationDrawable。 –

3

這裏是爲把一個旋轉繪製一個ImageView的一個很好的解決方案:

RotateAnimation anim = new RotateAnimation(0.0f, 360.0f , Animation.RELATIVE_TO_SELF, .5f, Animation.RELATIVE_TO_SELF, .5f); 
anim.setInterpolator(new LinearInterpolator()); 
anim.setRepeatCount(Animation.INFINITE); 
anim.setDuration(3000); 
iv.setAnimation(anim); 
iv.startAnimation(anim); 
+0

檢查編輯的答案... –

0

我知道得很晚,但對於那些誰在未來尋找答案。

假設這是你的layer-list

layer_list.xml

<?xml version="1.0" encoding="utf-8"?> 
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@android:id/rotate_drawable"> 
     <rotate 
      android:duration="4000" 
      android:fromDegrees="0" 
      android:pivotX="50%" 
      android:pivotY="50%" 
      android:toDegrees="720"> 

      <shape 
       android:innerRadius="20dp" 
       android:shape="ring" 
       android:thickness="4dp" 
       android:useLevel="false"> 
       <size 
        android:width="48dp" 
        android:height="48dp" /> 

       <gradient 
        android:endColor="@android:color/white" 
        android:startColor="#00ffffff" 
        android:type="sweep" 
        android:useLevel="false" /> 
      </shape> 

     </rotate> 
    </item> 
</layer-list> 

所以你java代碼可以象下面這樣:

final LayerDrawable layerDrawable = 
     (LayerDrawable) getResources().getDrawable(R.drawable.layer_list); 

final RotateDrawable rotateDrawable = 
     (RotateDrawable) layerDrawable.findDrawableByLayerId(R.id.rotate_drawable); 

final ObjectAnimator objectAnimator = ObjectAnimator.ofInt(rotateDrawable, "level", 0, 10000) 
     .setDuration(4000); 
objectAnimator.setRepeatCount(ObjectAnimator.INFINITE); 
objectAnimator.setInterpolator(new LinearInterpolator()); 
objectAnimator.start();