【转】Android Drawable Resource学习(十一)、RotateDrawable

时间:2023-01-27 14:59:34

对另一个drawable资源,基于当前的level,进行旋转的drawable。

文件位置:
res/drawable/filename.xml
文件名即资源名
编译数据类型:
指向 RotateDrawable的指针。
资源引用:
In Java: R.drawable.filename
In XML: @[package:]drawable/filename
语法:
<?xml version="1.0" encoding="utf-8"?>
<rotate
xmlns:android="http://schemas.android.com/apk/res/android"
android:drawable=""
    android:visible=""
    android:fromDegrees=""
    android:toDegrees=""
    android:pivotX=""
    android:pivotY=""/>

元素:

<rotate>

定义一个RotateDrawable,必须作为根元素。

属性:

xmlns:android
String类型。 必须的。定义XML文件的命名空间。必须是 "http://schemas.android.com/apk/res/android".
android:drawable

Drawable 资源。必须的。引用一个drawable资源。

android:visible
Boolean。是否可见。
android:fromDegrees
整形。  从多少的角度开始旋转
android:toDegrees
整形。  到多少的角度结束旋转
android:pivotX
百分比。  旋转的中心在图片X轴的百分比
android:visible
百分比。  旋转的中心在图片Y轴的百分比
参考:

示例和解释:

坐标的信息如下:

【转】Android Drawable Resource学习(十一)、RotateDrawable

1、原始图片如下:

【转】Android Drawable Resource学习(十一)、RotateDrawable

2、在 scale.xml文件中定义如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <rotate xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:drawable="@drawable/image02"
  4. android:visible="true"
  5. android:fromDegrees="-90"
  6. android:toDegrees="180"
  7. android:pivotX="50%"
  8. android:pivotY="50%">
  9. </rotate>

那么,图片的初始角度为-90。即如下:

【转】Android Drawable Resource学习(十一)、RotateDrawable

要旋转到的角度如下:

【转】Android Drawable Resource学习(十一)、RotateDrawable

并且是顺时针旋转。

3、那么图片将从-90到180进行旋转。level值为10000,也就是说level每加1000,即顺时针旋转270/10000*1000=27度。

可以根据显示看出来效果。

    1. public class MainActivity extends Activity{
    2. RotateDrawable rotateDrawable;
    3. int level=0;
    4. @Override
    5. protected void onCreate(Bundle savedInstanceState) {
    6. super.onCreate(savedInstanceState);
    7. setContentView(R.layout.activity_main);
    8. ImageView imageView=(ImageView)findViewById(R.id.imgView);
    9. rotateDrawable=(RotateDrawable)imageView.getDrawable();
    10. thread.start();
    11. }
    12. Thread thread=new Thread(new Runnable() {
    13. public void run() {
    14. while (level<=10000) {
    15. handler.sendEmptyMessage(0x00);
    16. try {
    17. Thread.sleep(2000);
    18. } catch (InterruptedException e) {
    19. e.printStackTrace();
    20. }
    21. }
    22. }
    23. });
    24. Handler handler=new Handler(){
    25. public void handleMessage(Message msg) {
    26. Toast.makeText(MainActivity.this, level+"", 500).show();
    27. rotateDrawable.setLevel(level);
    28. level+=1000;
    29. };
    30. };
    31. }  
      1. from:http://blog.csdn.net/lonelyroamer/article/details/8252533