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发生变化后执行。

final View view=//smth;
...
view.post(new Runnable() {
            @Override
            public void run() {
                view.getHeight(); //height is ready
            }
        });

二、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文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
     <ImageView
         android:id="@+id/iv"
            android:layout_gravity="center_vertical|center_horizontal"
            android:layout_width="7dp"
            android:layout_height="200dp"
            android:background="@drawable/diaobi_green"/>

</LinearLayout>

四、ImageRotate.java文件

package com.example.progresstest;

import android.app.Activity;
import android.os.Bundle;
import android.text.style.LineHeightSpan.WithDensity;
import android.util.Log;
import android.view.animation.Animation;
import android.view.animation.RotateAnimation;
import android.widget.ImageView;

public class ImageRotate extends Activity{
    private ImageView iv;
    private int width,height;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_imagerotate);

        iv = (ImageView) findViewById(R.id.iv);
        //这里用post是为了得到iv的高度和宽度,如果不用post,
        //得到的高度和宽度的值为0,因为在iv被绘制之前就调用了getHeight和getWidth;
        iv.post(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                /**
                 *RotateAnimation(fromDegrees, toDegrees, pivotX,pivotY)
                 *pivotX:该对象被旋转的点的X坐标,指定为一个绝对数字,其中0个是左边缘。
                 *pivotY:对象被旋转的点的Y坐标,指定为一个绝对数字,其中0个是顶部边缘。
                 */
                height = iv.getHeight();
                width = iv.getWidth()/2;
                RotateAnimation animation = new RotateAnimation(0, 90, width,height);
                animation.setDuration(10000);//设定转一圈的时间
//              animation.setRepeatCount(Animation.INFINITE);//设定无限循环
//              animation.setRepeatMode(Animation.RESTART);//设定重复模式
                iv.startAnimation(animation);
                //ture表示动画结束后停留在动画的最后位置,
                //false表示动画结束后回到初始位置,默认为false。
                animation.setFillAfter(true);
            }
        });
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值