• Android RotateAnimation详解


    RotateAnimation旋转坐标系为以旋转点为坐标系(0,0)点。x轴为0度,顺时针方向旋转一定的角度。
    1.RotateAnimation(fromDegrees, toDegrees) [默认以View左上角顶点为旋转点]。
    X轴顺时针转动到fromDegrees为旋转的起始点,
    X轴顺时针转动到toDegrees为旋转的起始点。
    如fromDegrees=0,toDegrees=90;为左上角顶点为旋转点。0度为起始点,90度为终点。进行旋转,旋转了90度
    如fromDegrees=60,toDegrees=90;为左上角顶点为旋转点。60度为起始点,90度为终点。进行旋转,旋转了90-60=30度

    2.RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
    (pivotX,pivotY)为旋转点。pivotX为距离左侧的偏移量,pivotY为距离顶部的偏移量。即为相对于View左上角(0,0)的坐标点。
    假设:

    View width=100px,height=100px
    RotateAnimation(0,10,100,100);则以右下角顶点为旋转点,从原始位置顺时针旋转10度
    RotateAnimation(0,90,50,50);则以View的中心点为旋转点,旋转90度

    3.RotateAnimation(fromDegrees, toDegrees, pivotXType, pivotXValue, pivotYType, pivotYValue)
    pivotXType, pivotXValue, pivotYType, pivotYValue  旋转点类型及其值。
    Animation.ABSOLUTE为绝对值 其他为百分比。这个和平移动画的一样,不了解可以去那看
    假设

    RotateAnimation(0, 90, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f); 按中心点旋转90度


    效果和2中的RotateAnimation(0,90,50,50);则以View的中心点为旋转点,旋转90度 。效果一样

    new RotateAnimation(0, 180, centerX,centerY);

    第一个参数表示动画的起始角度,第二个参数表示动画的结束角度,第三个表示动画的旋转中心x轴,第四个表示动画旋转中心y轴。

    rotateAnimation.setDuration(1000 * 20);

    表动画持续20s。

    rotateAnimation.setFillAfter(true);

    ture表示动画结束后停留在动画的最后位置,false表示动画结束后回到初始位置,默认为false。

    mView.startAnimation(rotateAnimation);

    表示在mView中启动动画。 

    列子:随便找张图片  两个按钮就行.

    RotateAnimation (float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
    参数说明:
    float fromDegrees:旋转的开始角度。
    float toDegrees:旋转的结束角度。
    int pivotXType:X轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
    float pivotXValue:X坐标的伸缩值。
    int pivotYType:Y轴的伸缩模式,可以取值为ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
    float pivotYValue:Y坐标的伸缩值。 

     
    public class MainActivity extends Activity { 
    ImageView image; 
    Button start; 
    Button cancel; 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    image = (ImageView) findViewById(R.id.main_img); 
    start = (Button) findViewById(R.id.main_start); 
    cancel = (Button) findViewById(R.id.main_cancel); 
    /** 设置旋转动画 */ 
    final RotateAnimation animation =new RotateAnimation(0f,360f,Animation.RELATIVE_TO_SELF, 
    0.5f,Animation.RELATIVE_TO_SELF,0.5f); 
    animation.setDuration(3000);//设置动画持续时间 
    /** 常用方法 */ 
    //animation.setRepeatCount(int repeatCount);//设置重复次数 
    //animation.setFillAfter(boolean);//动画执行完后是否停留在执行完的状态 
    //animation.setStartOffset(long startOffset);//执行前的等待时间 
    start.setOnClickListener(new OnClickListener() { 
    public void onClick(View arg0) { 
    image.setAnimation(animation); 
    /** 开始动画 */ 
    animation.startNow(); 
    } 
    }); 
    cancel.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 
    /** 结束动画 */ 
    animation.cancel(); 
    } 
    }); 
    } 
    } 
  • 相关阅读:
    Java中String的intern方法
    3.7测试复盘
    3.6测试复盘
    LTMU论文解析
    移动机器人相机模型:从相机移动到二维图像
    一步步分析MIPS数据通路(单周期)
    Slam笔记I
    如何理解SiamRPN++?
    如何使用Pytorch迅速写一个Mnist数据分类器
    PySide2的This application failed to start because no Qt platform plugin could be initialized解决方式
  • 原文地址:https://www.cnblogs.com/AceIsSunshineRain/p/5188966.html
Copyright © 2020-2023  润新知