动画效果是应用在什么地方呢?帧动画它的一个特色是多张图片组在一起,这就是帧动画,它是利用图片渐次改变,一般有十多帧,也就是十多张,实现一个动态的效果。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文件中进行删除srcpublic 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回调之类的,没找到,那么下面补间动画。补间动画更加高级咯。。