欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

android 动画之基础动画 alpha(渐变) scale(缩放) translate(移动) rotate(旋转)

程序员文章站 2022-06-27 14:21:57
...

基础动画的实现分为两种方式 一是xml 方式 (在res包下创建anim 在然后进行属性xml创建 最后引用) 一是java代码方式(分别创建 AlphaAnimation TranslateAnimation ScaleAnimation RotateAnimation对象 然后设置属性 并添加给需要实现动画的对象 并启动对象)
首先我们需要一个执行动画的对象 给一张图片 并给出四个执行基础动画的按钮

<LinearLayout
       android:layout_width="match_parent"
       android:layout_height="80dp"
       android:gravity="center_vertical">
       <Button
           android:layout_width="0dp"
           android:layout_height="50dp"
           android:layout_weight="1"
           android:textSize="12sp"
           android:gravity="center"
           android:id="@+id/anim_alpha"
           android:text="alpha"/>
       <Button
           android:layout_width="0dp"
           android:layout_height="50dp"
           android:layout_weight="1"
           android:id="@+id/anim_scale"
           android:textSize="12sp"
           android:gravity="center"
           android:text="scale"/>
       <Button
           android:layout_width="0dp"
           android:layout_height="50dp"
           android:layout_weight="1"
           android:textSize="12sp"
           android:id="@+id/anim_translate"
           android:gravity="center"
           android:text="translate"/>
       <Button
           android:layout_width="0dp"
           android:layout_height="50dp"
           android:layout_weight="1"
           android:textSize="12sp"
           android:id="@+id/anim_rotate"
           android:gravity="center"
           android:text="rotate"/>
   </LinearLayout>
    <ImageView
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:id="@+id/anim_img"
        android:src="@mipmap/m1"
        android:layout_gravity="center"/> 

android 动画之基础动画 alpha(渐变) scale(缩放) translate(移动) rotate(旋转)

// xml 实现方式
//渐变

android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="3000"
android:fillAfter="true"
/>

//缩放

android:fromXScale=”0.0”
android:toXScale=”1.4”
android:fromYScale=”0.0”
android:toYScale=”1.4”
android:pivotX=”50%”
android:pivotY=”50%”
android:duration=”700”
android:fillAfter=”true”
/>

// 移动

android:fromXDelta="0"
android:toXDelta="-200"
android:fromYDelta="0"
android:toYDelta="-200"
android:duration="2000"
android:fillAfter="true"
/>


// 旋转

android:fromDegrees="0"
android:toDegrees="360"
android:pivotX="50%"
android:pivotY="50%"
android:duration="700"
android:fillAfter="true"
/>

private ImageView anim_img;
private Animation scaleAnim;
private Animation alphaAnim;
private Animation translateAnim;
private Animation rotateAnim;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();


}

private void initView() {
     findViewById(R.id.anim_rotate).setOnClickListener(this);
    findViewById(R.id.anim_scale).setOnClickListener(this);
     findViewById(R.id.anim_translate).setOnClickListener(this);
     findViewById(R.id.anim_alpha).setOnClickListener(this);
    anim_img = (ImageView) findViewById(R.id.anim_img);

}

@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.anim_rotate:
            animRotateXml();

            break;
        case R.id.anim_scale:
            animScaleXml();

            break;
        case R.id.anim_translate:
            animTranslateXml();

            break;
        case R.id.anim_alpha:
            animAlphaXml();

            break;
    }

}
    // 渐变
private void animAlphaXml() {
    /** xml 参数
     *  android:fromAlpha="0.0"
     android:toAlpha="1.0"
     android:duration="3000"
     android:fillAfter="true"
     *
     */

    /** xml 属性
     * android:fromAlpha   动画开始的透明度,从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
     android:toAlpha       动画结束时的透明度,也是从0.0 --1.0 ,0.0表示全透明,1.0表示完全不透明
     */
    alphaAnim = AnimationUtils.loadAnimation(this, R.anim.aalpha);
    anim_img.startAnimation(alphaAnim);
}
    // 移动
private void animTranslateXml() {
    /**
     * translate标签所具有的属性为:
     android:fromXDelta     起始点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
     android:fromYDelta    起始点Y轴从标,可以是数值、百分数、百分数p 三种样式;
     android:toXDelta         结束点X轴坐标
     android:toYDelta        结束点Y轴坐标
     */

    /** xml 属性
     * android:fromXDelta="0"
     android:toXDelta="-200"
     android:fromYDelta="0"
     android:toYDelta="-200"
     android:duration="2000"
     android:fillAfter="true"
     */
    translateAnim = AnimationUtils.loadAnimation(this, R.anim.atranslate);
    anim_img.startAnimation(translateAnim);
}
    // 缩放
private void animScaleXml() {

    /**xml 参数
     * android:fromXScale="0.0"
     android:toXScale="1.4"
     android:fromYScale="0.0"
     android:toYScale="1.4"
     android:pivotX="50%"
     android:pivotY="50%"
     android:duration="700"
     android:fillAfter="true"
     */

    /** xml 属性
     * android:fromXScale    起始的X方向上相对自身的缩放比例,浮点值,比如1.0代表自身无变化,0.5代表起始时缩小一倍,2.0代表放大一倍;
     android:toXScale        结尾的X方向上相对自身的缩放比例,浮点值;
     android:fromYScale    起始的Y方向上相对自身的缩放比例,浮点值,
     android:toYScale        结尾的Y方向上相对自身的缩放比例,浮点值;
     android:pivotX            缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,当为数值时,表示在当前View的左上角,即原点处加上50px,做为起始缩放点;如果是50%,表示在当前控件的左上角加上自己宽度的50%做为起始点;如果是50%p,那么就是表示在当前的左上角加上父控件宽度的50%做为起始点x轴坐标。(具体意义,后面会举例演示)
     android:pivotY           缩放起点Y轴坐标,取值及意义跟android:pivotX一样。
     *
     */
    scaleAnim = AnimationUtils.loadAnimation(this, R.anim.ascale);
    anim_img.startAnimation(scaleAnim);
}
    // 旋转
private void animRotateXml() {
    /** xml 参数
     * android:fromDegrees="0"
     android:toDegrees="360"
     android:pivotX="50%"
     android:pivotY="50%"
     android:duration="700"
     android:fillAfter="true"
     */
    /**
     * xml 属性
     * android:fromDegrees     开始旋转的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
     android:toDegrees         结束时旋转到的角度位置,正值代表顺时针方向度数,负值代码逆时针方向度数
     android:pivotX               缩放起点X轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p,具体意义已在scale标签中讲述,这里就不再重讲
     android:pivotY               缩放起点Y轴坐标,可以是数值、百分数、百分数p 三种样式,比如 50、50%、50%p
     */


    rotateAnim = AnimationUtils.loadAnimation(this, R.anim.arotate);
    anim_img.startAnimation(rotateAnim);
}


**// java 代码实现**

private void animAlphaJava(){

    /** AlphaAnimation 构造函数
     * AlphaAnimation(Context context, AttributeSet attrs)  同样,从本地XML加载动画,基本不用
     AlphaAnimation(float fromAlpha, float toAlpha)
     */
    AlphaAnimation alphaAnimation = new AlphaAnimation(0.0f,1.0f);
    alphaAnimation.setDuration(3000);
    alphaAnimation.setFillAfter(true);

    anim_img.startAnimation(alphaAnimation);
}
private void animTranslateJava(){


    /** TranslateAnimation  构造函数
     * TranslateAnimation(Context context, AttributeSet attrs)  同样,基本不用
     TranslateAnimation(float fromXDelta, float toXDelta, float fromYDelta, float toYDelta)
     TranslateAnimation(int fromXType, float fromXValue, int toXType, float toXValue, int fromYType, float fromYValue, int toYType, float toYValue)
     */
    TranslateAnimation translateAnimation = new TranslateAnimation(Animation.ABSOLUTE,0,Animation.ABSOLUTE,-200,Animation.ABSOLUTE,0,Animation.ABSOLUTE,-200);
    translateAnimation.setDuration(2000);
    translateAnimation.setFillAfter(true);
    anim_img.startAnimation(translateAnimation);
}
private void animScaleJava(){



    /**ScaleAnimation 构造函数
     * ScaleAnimation(Context context, AttributeSet attrs)  从XML文件加载动画,基本用不到
     ScaleAnimation(float fromX, float toX, float fromY, float toY)
     ScaleAnimation(float fromX, float toX, float fromY, float toY, float pivotX, float pivotY)
     ScaleAnimation(float fromX, float toX, float fromY, float toY, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
     */

   ScaleAnimation scaleAnim = new ScaleAnimation(0.0f,1.4f,0.0f,1.4f,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    scaleAnim.setDuration(700);
    anim_img.startAnimation(scaleAnim);

}
private void animRotateJava(){

    /** RotateAnimation 构造函数
     * RotateAnimation(Context context, AttributeSet attrs)  从本地XML文档加载动画,同样,基本不用
     RotateAnimation(float fromDegrees, float toDegrees)
     RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
     RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
     *
     */
    RotateAnimation rotateAnimation = new RotateAnimation(0,360,Animation.RELATIVE_TO_SELF,0.5f,Animation.RELATIVE_TO_SELF,0.5f);
    rotateAnimation.setDuration(700);
    rotateAnimation.setFillAfter(true);
    anim_img.startAnimation(rotateAnimation);

}


@Override
public void onClick(View v) {
    switch (v.getId()){
        case R.id.anim_rotate:

            animRotateJava();
            break;
        case R.id.anim_scale:

            animScaleJava();
            break;
        case R.id.anim_translate:

            animTranslateJava();
            break;
        case R.id.anim_alpha:

            animAlphaJava();
            break;
    }

}

“`

效果图就不上了 可以下载demo —->>>> https://download.csdn.net/download/naide_s/10331935