Android動畫RotateAnimation(fromDegrees, toDegrees, pivotX,pivotY)參數


Android動畫RotateAnimation(fromDegrees, toDegrees, pivotX,pivotY)參數

博客撰寫人:It一zhai男 
轉載請標明地址:http://blog.csdn.net/u013293125/article/details/52637189

 

本文內容知識點包括: 
【1】ImageView的getHeight()和getWidth()為0的解決方法及原因 
【2】RotateAnimation(fromDegrees, toDegrees, pivotX,pivotY)參數解析

 

先上截圖: 

 

 

一、ImageView的getHeight()和getWidth()為0的解決方法及原因 
原因:因為onCreate方法執行完了,我們定義的控件才會被度量(measure),所以我們在onCreate方法里面通過view.getHeight()獲取控件的高度或者寬度肯定是0,因為它自己還沒有被度量,也就是說他自己都不知道自己有多高,而你這時候去獲取它的尺寸,肯定是不行的. 
網上有大神寫的很詳細: 
http://www.cnblogs.com/kissazi2/p/4133927.html 
http://blog.csdn.net/xiayu98020214/article/details/46714015

解決方法:將一個runnable添加到Layout隊列中:View.post()。簡單地說,只要用View.post()一個runnable就可以了。runnable對象中的方法會在View的measure、layout等事件后觸發,具體的參考Romain Guy:

UI事件隊列會按順序處理事件。在setContentView()被調用后,事件隊列中會包含一個要求重新layout的message,所以任何你post到隊列中的東西都會在Layout發生變化后執行。

1 final View view=//smth;
2 ...
3 view.post(new Runnable() {
4             @Override
5             public void run() {
6                 view.getHeight(); //height is ready
7             }
8         });

二、RotateAnimation(fromDegrees, toDegrees, pivotX,pivotY)參數解析 
fromDegrees:旋轉的起始角度 
toDegrees:旋轉的終止角度 
pivotX:該對象被旋轉的點的X坐標,指定為一個絕對數字,其中0個是左邊緣。 
pivotY:對象被旋轉的點的Y坐標,指定為一個絕對數字,其中0個是頂部邊緣。

pivotX和pivotY怎么理解呢?其實就是你所要旋轉的View的左頂點為坐標原點,pivotX=0時是View的左邊緣,pivotY=0時是View的頂部邊緣。點(pivotX=0,pivotY=0)就是View的左頂點。

 

三、activity_imagerotate.xml文件:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6      <ImageView
 7          android:id="@+id/iv"
 8             android:layout_gravity="center_vertical|center_horizontal"
 9             android:layout_width="7dp"
10             android:layout_height="200dp"
11             android:background="@drawable/diaobi_green"/>
12 
13 </LinearLayout>

四、ImageRotate.java文件

 1 package com.example.progresstest;
 2 
 3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.text.style.LineHeightSpan.WithDensity;
 6 import android.util.Log;
 7 import android.view.animation.Animation;
 8 import android.view.animation.RotateAnimation;
 9 import android.widget.ImageView;
10 
11 public class ImageRotate extends Activity{
12     private ImageView iv;
13     private int width,height;
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         // TODO Auto-generated method stub
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_imagerotate);
19 
20         iv = (ImageView) findViewById(R.id.iv);
21         //這里用post是為了得到iv的高度和寬度,如果不用post,
22         //得到的高度和寬度的值為0,因為在iv被繪制之前就調用了getHeight和getWidth;
23         iv.post(new Runnable() {
24 
25             @Override
26             public void run() {
27                 // TODO Auto-generated method stub
28                 /**
29                  *RotateAnimation(fromDegrees, toDegrees, pivotX,pivotY)
30                  *pivotX:該對象被旋轉的點的X坐標,指定為一個絕對數字,其中0個是左邊緣。
31                  *pivotY:對象被旋轉的點的Y坐標,指定為一個絕對數字,其中0個是頂部邊緣。
32                  */
33                 height = iv.getHeight();
34                 width = iv.getWidth()/2;
35                 RotateAnimation animation = new RotateAnimation(0, 90, width,height);
36                 animation.setDuration(10000);//設定轉一圈的時間
37 //              animation.setRepeatCount(Animation.INFINITE);//設定無限循環
38 //              animation.setRepeatMode(Animation.RESTART);//設定重復模式
39                 iv.startAnimation(animation);
40                 //ture表示動畫結束后停留在動畫的最后位置,
41                 //false表示動畫結束后回到初始位置,默認為false。
42                 animation.setFillAfter(true);
43             }
44         });
45     }
46 
47 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM