安卓 动画帧动画基础动画

   动画效果是应用在什么地方呢?帧动画它的一个特色是多张图片组在一起,这就是帧动画,它是利用图片渐次改变,一般有十多帧,也就是十多张,实现一个动态的效果。FrameAnimation,看具体如何实现的

一、首先我们需要找到图,这些图UI,都会为你准备好,然后导入R文件的drawable文件夹,这样有了图以后,我们就可以进行展示的资源了,但是现在虽然有图了,帧动画还是图片还是必须设置能显示图片的控件上,这里就用imageview,在Layout文件中设置一个XML文件,虽然在这里XML文件中有是一个imageview但是由于是一组图,那么我们添加哪一张图那?所以在这个时候我们需要把这些图添加成一组图,那么又如何添加那?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.wj.administrator.mylayout.Animation">

    <ImageView
        android:id="@+id/imageView123"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
          //注意这是
        app:srcCompat="@drawable/animdraw" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="平移" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="缩小" />
    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="旋转" />
    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="渐隐" />
    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="特效" />
</LinearLayout>

二、所以在这个时候我们需要把这些图添加成一组图,通过在drawable文件夹下建立一个xml文件,记住帧动画是在Drawable文件夹下,创建一个drawable-resourse-file,然后显示的是selector改成animation-list就可以;如何放上小元素一个一个图呢,放的是item,同时设置间隔时间;那么前面的

srcCompat放的就是这个文件app:srcCompat="@drawable/animdraw",现在设置了播放了资源,设置每张图的播放间隔时间,但是没有设置播放模式,播放的次数还没有设置。这个播放的模式是给所有的图片设置。在里面用到了一个oneshot,设置为true的话执行一次,设置为false无限循环。
2.

<item>元素代表一帧动画,android:drawable指定此帧动画所对应的图片资源,android:druation代表此帧持续的时间,整数,单位为毫秒。

3.

 


<?xml version="1.0" encoding="utf-8"?>
<animation-list

    xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false"
    >
    <item android:drawable="@drawable/ani1" android:duration="1000"></item>
    <item android:drawable="@drawable/ani2" android:duration="1000"></item>
    <item android:drawable="@drawable/ani3" android:duration="1000"></item>
    <item android:drawable="@drawable/ani4" android:duration="1000"></item>
    <item android:drawable="@drawable/ani5" android:duration="1000"></item>
    <item android:drawable="@drawable/ani6" android:duration="1000"></item>

</animation-list>
 
四、在activty文件中就可以直接加载了,就可以播放了,在夜神上这样就直接可以播放,不用在activty中干什么,但是在有些手机上却不能播放。
 
package com.wj.administrator.mylayout;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.Button;

public class Animation extends AppCompatActivity implements View.OnClickListener {
      private Button but5;
     
      private android.view.animation.Animation ani;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);
      
        but5=(Button) findViewById(R.id.button6);


    }

   
}
五、现在我们要通过点击button,让它开或者结束,如何做呢?首先在xml文件建立两个Button,然后在找到这个控件,实现接口,在设置点击事件,那么如何首先的有一个动画,动画的类是哪个呢?
AnimationDrawable,是这个类,这个类就是一个动画类,那么动画从哪里取呢?是我们设置的控件ImageView里面挂载的,具体就是那个src上设置的一组动画吧。那么我们需要获取src吧,通过调用imag的getDrawable(),就可以获取到了,然后就可以对其设置开始或者结束
 anim= (AnimationDrawable) imag.getDrawable();
                anim.start();
package com.wj.administrator.mylayout;

import android.graphics.drawable.AnimationDrawable;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.ImageView;

public class Animation extends AppCompatActivity implements View.OnClickListener {
      private Button but5,but6;
    private AnimationDrawable anim;
    private ImageView imag;

      private android.view.animation.Animation ani;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);

        but5=(Button) findViewById(R.id.button5);
        but6=(Button) findViewById(R.id.button6);
        imag=(ImageView) findViewById(R.id.imageView123);
        but5.setOnClickListener(this);
        but6.setOnClickListener(this);



    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    }

    @Override
            public void onClick(View v) {
            switch(v.getId())
            {
            case R.id.button5:
                 anim= (AnimationDrawable) imag.getDrawable();
                anim.start();

                break;
            case R.id.button6:
                anim= (AnimationDrawable) imag.getDrawable();
                anim.stop();

                break;
        }
    }
}
六、目前还有一个问题就是,现在一开就是动的,如何开始时可以是静止的呢?首先在xml文件中进行删除src
public void onClick(View v) {
switch(v.getId())
{
case R.id.button5:
    if(anim==null)
    {
        imag.setImageResource(R.drawable.animdraw);
        anim= (AnimationDrawable) imag.getDrawable();
        anim.start();
    }else
    {
        anim= (AnimationDrawable) imag.getDrawable();
        anim.start();
    }
//其它这控件xml文件ImageView
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.wj.administrator.mylayout.Animation">

    <ImageView
        android:id="@+id/imageView123"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

      />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="平移" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="缩小" />
    <Button
        android:id="@+id/button4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="旋转" />
    <Button
        android:id="@+id/button5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="开始" />
    <Button
        android:id="@+id/button6"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="停止" />
</LinearLayout>
六、刚才是给Imageview设置的,那么可以不可以对非Imageview设置呢?完全是可以的记住设置的方法不一样而已。
 tv.setBackgroundResource(R.drawable.animdraw);
                        anim= (AnimationDrawable)tv.getBackground();
                        anim.start();
//这是换做其它控件的情况
public class Animation extends AppCompatActivity implements View.OnClickListener {
      private Button but5,but6;
    private AnimationDrawable anim;
    private ImageView imag;
    private TextView tv;

      private android.view.animation.Animation ani;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_animation);

        but5=(Button) findViewById(R.id.button5);
        but6=(Button) findViewById(R.id.button6);
        imag=(ImageView) findViewById(R.id.imageView123);
        tv=(TextView) findViewById(R.id.text7);
        but5.setOnClickListener(this);
        but6.setOnClickListener(this);


//        imag=(ImageView) findViewById(R.id.imageView123);
//        imag.setImageResource(R.drawable.animdraw);
//
//         animation= (AnimationDrawable)imag.getDrawable();
//        animation.start();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
    }

    @Override
            public void onClick(View v) {
            switch(v.getId())
            {
                case R.id.button5:
                    if(anim==null)
                    {
                        tv.setBackgroundResource(R.drawable.animdraw);
                        anim= (AnimationDrawable)tv.getBackground();
                        anim.start();
                    }else
                        {
                            anim= (AnimationDrawable)tv.getBackground();
                            anim.start();
                        }

//                ani= AnimationUtils.loadAnimation(Animation.this,R.anim.tran);
//                but5.startAnimation(ani);
                break;
            case R.id.button6:
                anim= (AnimationDrawable)tv.getBackground();
                anim.stop();
//                ani= AnimationUtils.loadAnimation(Animation.this,R.anim.tran);
//                but6.startAnimation(ani);
                break;
        }
    }
}
帧动画就到这里,简单来说就是这个动画类如何获取,以及如何使用它的方法;就到这里了,帧动画可以用在广告嘛...或者什么什么的,但是不知道什么时候放完了,此时动画需要有监听事件,因为要监听什么时候放完了,或者callback回调之类的,没找到,那么下面补间动画。补间动画更加高级咯。。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值