Android Drawable Resource学习(十一)、RotateDrawable

对另一个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轴的百分比

 


参考:

 

 

示例和解释:

坐标的信息如下:

1、原始图片如下:

 

 

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。即如下:

 

 

要旋转到的角度如下:

 

并且是顺时针旋转。

 

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.  
  13. Thread thread=new Thread(new Runnable() {

  14. public void run() {

  15. while (level<=10000) {

  16. handler.sendEmptyMessage(0x00);

  17. try {

  18. Thread.sleep(2000);

  19. } catch (InterruptedException e) {

  20. e.printStackTrace();

  21. }

  22. }

  23. }

  24. });

  25.  
  26. Handler handler=new Handler(){

  27. public void handleMessage(Message msg) {

  28. Toast.makeText(MainActivity.this, level+"", 500).show();

  29. rotateDrawable.setLevel(level);

  30. level+=1000;

  31. };

  32. };

  33. }

展开阅读全文

没有更多推荐了,返回首页