android与逐帧动画:
效果图:
当我们点击按钮时,该图片会不停的运动,当再次点击按钮时,会停止在当前的状态。
或者
一开始时,图片就会不停的运动.
activity代码:
package com.nj.test;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
/**
*
* @description android中的逐帧动画.
* 逐帧动画的原理很简单,跟电影的播放一样,一张张类似的图片不停的切换,当切换速度达到一定值时,
* 我们的视觉就会出现残影,残影的出现保证了视觉上变化的连续性,这时候图片的切换看在我们眼中就跟真实的一样了。
* 想使用逐帧动画:
* 第一步:需要在res/drawable文件夹下新建一个xml文件,该文件详细定义了动画播放时所用的图片、切换每张图片
* 所用的时间、是否为连续播放等等。(有些文章说,在res/anim文件夹下放置该文件,事实证明,会出错哦)
* 第二步:在代码中,将该动画布局文件,赋值给特定的图片展示控件,如本例子中的ImageView。
* 第三步:通过imageView.getBackGround()获取相应的AnimationDrawable对象,然后通过该对象的方法进行控制动画
*/
public class ExamplesActivity extends Activity {
private ImageView imageViewNumber,imageViewRole;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
imageViewNumber = (ImageView) findViewById(R.id.imageView_animation1);
imageViewNumber.setBackgroundResource(R.drawable.number_animation_drawable);
imageViewRole = (ImageView) findViewById(R.id.imageView_role);
imageViewRole.setBackgroundResource(R.drawable.role_animation_drawable);
}
public void myClickHandler(View targetButton){
// 获取AnimationDrawable对象
AnimationDrawable animationDrawable = (AnimationDrawable)imageViewNumber.getBackground();
AnimationDrawable animationDrawable2 = (AnimationDrawable)imageViewRole.getBackground();
// 动画是否正在运行
if(animationDrawable.isRunning()){
//停止动画播放
animationDrawable.stop();
}
else if(!animationDrawable.isRunning()){
//开始或者继续动画播放
animationDrawable.start();
}
// 动画是否正在运行
if(animationDrawable2.isRunning()){
//停止动画播放
animationDrawable2.stop();
}
else if(!animationDrawable2.isRunning()){
//开始或者继续动画播放
animationDrawable2.start();
}
}
/***
* 一开始就运动
*/
public void onWindowFocusChanged(boolean hasFocus) {
// 获取AnimationDrawable对象
AnimationDrawable animation1 = (AnimationDrawable)imageViewNumber.getBackground();
AnimationDrawable animation2 = (AnimationDrawable)imageViewRole.getBackground();
super.onWindowFocusChanged(hasFocus);
if(hasFocus){
animation1.start();
animation2.start();
}else{
animation1.stop();
animation2.stop();
}
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/button_animation1"
android:text="动画开始"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="myClickHandler"></Button>
<ImageView
android:id="@+id/imageView_animation1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"></ImageView>
<ImageView
android:id ="@+id/imageView_role"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="50dp"
/>
</LinearLayout>
number_animation_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
每个item就是一帧,drawable是该帧显示的图片,duration是显示时间,
android:oneshot=”false”表示动画一直进行,若为true则表示只播放一次动画
-->
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
>
<item android:drawable="@drawable/number0" android:duration="50"></item>
<item android:drawable="@drawable/number1" android:duration="50"></item>
<item android:drawable="@drawable/number2" android:duration="50"></item>
<item android:drawable="@drawable/number3" android:duration="50"></item>
<item android:drawable="@drawable/number4" android:duration="50"></item>
<item android:drawable="@drawable/number5" android:duration="50"></item>
</animation-list>
role_animation_drawable.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
根标签为animation-list,其中oneshot代表着是否只展示一遍,设置为false会不停的循环播放动画
根标签下,通过item标签对动画中的每一个图片进行声明
android:duration 表示展示所用的该图片的时间长度
每个item就是一帧,drawable是该帧显示的图片,duration是显示时间,
android:oneshot=”false”表示动画一直进行,若为true则表示只播放一次动画
-->
<animation-list
xmlns:android="http://schemas.android.com/apk/res/android"
android:oneshot="false"
>
<item android:drawable="@drawable/role1" android:duration="60"></item>
<item android:drawable="@drawable/role2" android:duration="60"></item>
<item android:drawable="@drawable/role3" android:duration="60"></item>
<item android:drawable="@drawable/role4" android:duration="60"></item>
</animation-list>
资源下载地址:http://download.youkuaiyun.com/detail/niejing654092427/3880651
例子2:
第一步:先上图片素材,以下素材放到res/drawable目录下:
图片素材: | | | | | | |
文件名称: | wifi1.png | wif2.png | wifi3.png | wifi4.png | wifi5.png | wifi6.png |
第二步:上动画Animation-list帧布局文件,有2个,一个是按顺序显示动画,一个是倒序显示动画,文件存放在res/anim目录下
顺序显示动画文件:animation1.xml
<?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/wifi1"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi2"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi3"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi4"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi5"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi6"
android:duration="150">
</item>
</animation-list>
倒序显示动画文件:animation2.xml
<?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/wifi6"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi5"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi4"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi3"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi2"
android:duration="150">
</item>
<item
android:drawable="@drawable/wifi1"
android:duration="150">
</item>
</animation-list>
第三步:上布局文件,放在res/layout目录下,文件名activity_main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ImageView
android:id="@+id/animationIV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:src="@drawable/animation1" />
<Button
android:id="@+id/one_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:text="顺序显示" />
<Button
android:id="@+id/stop_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:text="停止" />
<Button
android:id="@+id/two_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="5px"
android:text="倒序显示" />
</LinearLayout>
第四步:上Activity文件,文件名:MainActivity.java
package com.example.animation;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity
{
private ImageView animationIV;
private Button buttonA, stopBtn, buttonC;
private AnimationDrawable animationDrawable;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
animationIV = (ImageView) findViewById(R.id.animationIV);
buttonA = (Button) findViewById(R.id.one_btn);
stopBtn = (Button) findViewById(R.id.stop_btn);
buttonC = (Button) findViewById(R.id.two_btn);
buttonA.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationIV.setImageResource(R.drawable.animation1);
animationDrawable = (AnimationDrawable) animationIV.getDrawable();
animationDrawable.start();
}
});
stopBtn.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationDrawable = (AnimationDrawable) animationIV.getDrawable();
animationDrawable.stop();
}
});
buttonC.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
animationIV.setImageResource(R.drawable.animation2);
animationDrawable = (AnimationDrawable) animationIV.getDrawable();
animationDrawable.start();
}
});
}
}
资源下载地址: http://download.youkuaiyun.com/detail/niejing654092427/5540011