Android scale实现的几种简单的动画效果?

导读:本篇文章讲解 Android scale实现的几种简单的动画效果?,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

效果图:

Android scale实现的几种简单的动画效果?Android scale实现的几种简单的动画效果?

Android scale实现的几种简单的动画效果?

1.xml布局一样

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#FFEFF2F4"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn_show"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="显示" />

        <Button
            android:id="@+id/btn_hide"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="隐藏" />
    </LinearLayout>

    <LinearLayout
        android:id="@+id/linearyout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:background="#369DC5"
        android:orientation="vertical">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:text="@string/hello_world"
            android:textColor="#FFFFFFFF"
            android:textSize="20sp" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="@string/hello_world"
            android:textColor="#FFFFFFFF"
            android:textSize="20sp" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="5dp"
            android:gravity="center"
            android:text="@string/hello_world"
            android:textColor="#FFFFFFFF"
            android:textSize="20sp" />
    </LinearLayout>
</LinearLayout>

2.Activity中调用

(1).MainActivity

package com.ruidde.csdntestdemo;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import androidx.appcompat.app.AppCompatActivity;

import com.ruidde.csdntestdemo.units.AnimationDrawableUtil;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Context context;
    private Button btn01 , btn02 ,btn03 , btn04 ,btn05;
    private AnimationDrawableUtil drawableUtil;

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

    }

    public void initView() {
        btn01 = findViewById(R.id.btn01);
        btn02 = findViewById(R.id.btn02);
        btn03 = findViewById(R.id.btn03);
        btn04 = findViewById(R.id.btn04);
        btn05 = findViewById(R.id.btn05);

        btn01.setOnClickListener(this);
        btn02.setOnClickListener(this);
        btn03.setOnClickListener(this);
        btn04.setOnClickListener(this);
        btn05.setOnClickListener(this);
    }


    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn01:
                toStartActivity(AnimmationXiaLaActivity.class);
                break;
            case R.id.btn02:
                toStartActivity(AnimmationZuoYouActivity.class);
                break;
            case R.id.btn03:
                toStartActivity(TransparencyActivity.class);
                break;
            case R.id.btn04:
                context = this;
                drawableUtil = new AnimationDrawableUtil(context);
                drawableUtil.AnimationDrawableUtil(btn04);
                break;
            case R.id.btn05:

                break;
        }
    }

    public void toStartActivity(Class<?> cls) {
        Intent intent = new Intent(context, cls);
        startActivity(intent);
    }
}

(2).AnimmationXiaLaActivity

package com.ruidde.csdntestdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;

public class AnimmationXiaLaActivity extends Activity implements View.OnClickListener {
    private Button btn_show, btn_hide;
    private LinearLayout linearyout;
    private Animation showAnim = null;
    private Animation hideAnim = null;
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anim_xiala);
       // 加载动画
        showAnim = AnimationUtils.loadAnimation(this, R.anim.animation);
        hideAnim = AnimationUtils.loadAnimation(this, R.anim.animation_hide);

        btn_show = (Button) findViewById(R.id.btn_show);
        btn_hide = (Button) findViewById(R.id.btn_hide);
        linearyout = (LinearLayout) findViewById(R.id.linearyout);

        btn_show.setOnClickListener(this);
        btn_hide.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_show: // 显示
                linearyout.startAnimation(showAnim);
                linearyout.setVisibility(View.VISIBLE);
                break;
            case R.id.btn_hide: // 隐藏
                linearyout.startAnimation(hideAnim);
                linearyout.setVisibility(View.GONE);
                break;
        }

    }
}

(3).AnimmationZuoYouActivity

package com.ruidde.csdntestdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;

public class AnimmationZuoYouActivity extends Activity implements View.OnClickListener {
    private Button btn_show, btn_hide;
    private LinearLayout linearyout;
    private Animation showAnim = null;
    private Animation hideAnim = null;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anim_zuoyou);
        // 加载动画
        showAnim = AnimationUtils.loadAnimation(this, R.anim.animation_zy);
        hideAnim = AnimationUtils.loadAnimation(this, R.anim.animation_zy_hide);

        btn_show = (Button) findViewById(R.id.btn_show);
        btn_hide = (Button) findViewById(R.id.btn_hide);
        linearyout = (LinearLayout) findViewById(R.id.linearyout);

        btn_show.setOnClickListener(this);
        btn_hide.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_show: // 显示
                linearyout.startAnimation(showAnim);
                linearyout.setVisibility(View.VISIBLE);
                break;
            case R.id.btn_hide: // 隐藏
                linearyout.startAnimation(hideAnim);
                linearyout.setVisibility(View.GONE);
                break;
        }
    }
}

(4).TransparencyActivity

package com.ruidde.csdntestdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;

import androidx.annotation.Nullable;

public class TransparencyActivity extends Activity implements View.OnClickListener {

    private Button btn_show, btn_hide;
    private LinearLayout linearyout;
    private Animation showAnim = null;
    private Animation hideAnim = null;

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

        // 加载动画
        showAnim = AnimationUtils.loadAnimation(this, R.anim.show_anim);
        hideAnim = AnimationUtils.loadAnimation(this, R.anim.hide_anim);

        btn_show = (Button) findViewById(R.id.btn_show);
        btn_hide = (Button) findViewById(R.id.btn_hide);
        linearyout = (LinearLayout) findViewById(R.id.linearyout);

        btn_show.setOnClickListener(this);
        btn_hide.setOnClickListener(this);

    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_show: // 显示
                linearyout.startAnimation(showAnim);
                linearyout.setVisibility(View.VISIBLE);
                break;
            case R.id.btn_hide: // 隐藏
                linearyout.startAnimation(hideAnim);
                linearyout.setVisibility(View.GONE);
                break;
        }
    }
}

3.实现动画主要是anim目录下类

(1).animation

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >
    <!--
        从中间一条直线展开,从而形成一个页面
        android:fromXScale="0.0"
       android:toXScale="1.0"
               上面两句指的是组件从0.0比例展开到原图的  宽度  大小
       android:fromYScale="1.0"
       android:toYScale="1.0"
              这 上面两句指的是组件在高度上不发生变化
       android:pivotX="50%" 
               这一句指的是以组件宽的中间点作参照点展开
       android:duration="400"
        最后一句指动作时间为0.4秒(400毫秒)
     -->
     
    <scale 
       android:fromXScale="1.0"
       android:fromYScale="0.0"
        
       android:toXScale="1.0"
       android:toYScale="1.0"
        
       android:pivotY="0.1%p" 
       android:duration="1000"
       />
     
    <!-- 
        这样形成的效果就是你想要的展开效果, 
        在res文件夹下新建anim文件夹,在anime文件夹中新建一个xml,将这段代码复制进去
        然后在对应的Activity中用AnimationUtil类load一下就可以用了
    -->
</set>

(2).animation_hide

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator" >
  
    <scale 
       android:fromXScale="1.0"
       android:fromYScale="1.0"
        
       android:toXScale="1.0"
       android:toYScale="0.0"
       
       android:pivotY="0.1%p" 
       android:duration="1000"
       />
     
</set>

(3).animation_zy

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">
    <!--
        从中间一条直线展开,从而形成一个页面
        android:fromXScale="0.0"
       android:toXScale="1.0"
               上面两句指的是组件从0.0比例展开到原图的  宽度  大小
       android:fromYScale="1.0"
       android:toYScale="1.0"
              这 上面两句指的是组件在高度上不发生变化
       android:pivotX="50%" 
               这一句指的是以组件宽的中间点作参照点展开
       android:duration="400"
        最后一句指动作时间为0.4秒(400毫秒)
     -->

    <scale
        android:duration="1000"
        android:fromXScale="0.0"
        android:fromYScale="0.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="1.0"
        android:toYScale="1.0" />

    <!-- 
        这样形成的效果就是你想要的展开效果, 
        在res文件夹下新建anim文件夹,在anime文件夹中新建一个xml,将这段代码复制进去
        然后在对应的Activity中用AnimationUtil类load一下就可以用了
    -->
</set>

(4).animation_zy_hide

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:interpolator="@android:anim/accelerate_interpolator">

    <scale
        android:duration="1000"
        android:fromXScale="1.0"
        android:fromYScale="1.0"
        android:pivotX="50%"
        android:pivotY="50%"
        android:toXScale="0.0"
        android:toYScale="0.0" />

 
</set>

(5).show_anim

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 显示时逐渐从透明到不透明过度,同时移动一小段距离 -->

    <alpha
        android:duration="1000"
        android:fromAlpha="0.0"
        android:toAlpha="1.0" />
    <translate
        android:duration="800"
        android:fromYDelta="10%p"
        android:toYDelta="0" />
</set>

(6).hide_anim

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 显示时逐渐从不透明到透明过度,同时移动一小段距离 -->

    <alpha
        android:duration="1000"
        android:fromAlpha="1.0"
        android:toAlpha="0.0" />
    <translate
        android:duration="800"
        android:fromYDelta="0"
        android:toYDelta="10%p" />

</set>

4.drawable目录下类(loading_header_animation)

<?xml version="1.0" encoding="utf-8"?>
<!-- 
   根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
   根标签下,通过item标签对动画中的每一个图片进行声明
   android:duration 表示展示所用的该图片的时间长度
 -->
<animation-list xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="true"
    >
    <item android:drawable="@drawable/a" android:duration="100"></item>
   <item android:drawable="@drawable/b" android:duration="100"></item>
   <item android:drawable="@drawable/c" android:duration="100"></item>
   <item android:drawable="@drawable/d" android:duration="100"></item>
   <item android:drawable="@drawable/e" android:duration="100"></item>
   <item android:drawable="@drawable/f" android:duration="100"></item>
   <item android:drawable="@drawable/g" android:duration="100"></item>
</animation-list>

帧动画实现的图片是如下:

Android scale实现的几种简单的动画效果?Android scale实现的几种简单的动画效果?Android scale实现的几种简单的动画效果?

5.units创建的工具类(AnimationDrawableUtil)

package com.ruidde.csdntestdemo.units;

import android.annotation.SuppressLint;
import android.content.Context;
import android.graphics.drawable.AnimationDrawable;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.TextView;

import com.ruidde.csdntestdemo.R;

/**
 * 传一个ImageView 图片的背景就是图片切换的动画
 */
public class AnimationDrawableUtil {
    public AnimationDrawableUtil(Context context){

    }
    public void AnimationDrawableUtil(Button view){
        view.setBackgroundResource(R.drawable.loading_header_animation);
        //获得动画对象
        AnimationDrawable  animaition =(AnimationDrawable) view.getBackground();
        //是否仅仅启动一次?
        animaition.setOneShot(false);

        if(animaition.isRunning()){//是否正在运行?
            animaition.stop();//停止
        }else {
            animaition.start();//启动
        }

    }
    public void AnimationDrawableUtil(TextView view){
        view.setBackgroundResource(R.drawable.loading_header_animation);
        //获得动画对象
        AnimationDrawable  animaition =(AnimationDrawable) view.getBackground();
        //是否仅仅启动一次?
        animaition.setOneShot(false);

        if(animaition.isRunning()){//是否正在运行?
            animaition.stop();//停止
        }else {
            animaition.start();//启动
        }

    }
}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/119204.html

(0)
seven_的头像seven_bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!