动画的使用1——Drawable Animation
Drawable Animation可以称为帧动画,因为它是通过每次播放一帧Drawable资源实现的。
Drawable Animation算不上真正意义上的动画,因为它的内部实现是通过定时发送消息更新一个Drawable,
例如一个背景。所以使用这个动画的时候更像是使用一个背景资源,只不过更新背景的动作不用我们自己进行。
也许正是因为这个原因,android官方建议我们将这个动画资源放在drawable目录。
/**
* @description android中的逐帧动画.
* 逐帧动画的原理很简单,跟电影的播放一样,一张张类似的图片不停的切换,当切换速度达到一定值时,
* 我们的视觉就会出现残影,残影的出现保证了视觉上变化的连续性,这时候图片的切换看在我们眼中就跟真实的一样了。
- 想使用逐帧动画:
- 第一步:需要在res/drawable文件夹下新建一个xml文件,该文件详细定义了动画播放时所用的图片、切换每张图片
- 所用的时间、是否为连续播放等等。(有些文章说,在res/anim文件夹下放置该文件,事实证明,会出错哦)
- 第二步:在代码中,将该动画布局文件,赋值给特定的图片展示控件,如本例子中的ImageView。
- 第三步:通过imageView.getBackGround()获取相应的AnimationDrawable对象,然后通过该对象的方法进行控制动画
-
*/
使用帧动画非常之简单,只需要在drawable目录定义个xml文件,使用animation-list标签包裹所有组成这个动画的图片文件,设置播放速率。
然后在java代码中使用。
如图:
<?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/a" android:duration="200"/>
<item android:drawable="@drawable/b" android:duration="200"/>
<item android:drawable="@drawable/c" android:duration="200"/>
<item android:drawable="@drawable/d" android:duration="200"/>
</animation-list>
android:oneshot=”false”可以让动画循环播放
android:oneshot=”true”动画只能播放一次
里面的命名不规范自己改正一下
然后再layout写代码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<Button
android:text="点击开始,长按终止"
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
这样就定义好了我们的动画资源,之后就是在activity中调用
package com.example.drawableanimation;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
public class MainActivity extends Activity {
AnimationDrawable ad;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView imageview=(ImageView) findViewById(R.id.image);
ad = (AnimationDrawable) getResources().getDrawable(R.drawable.animation_list);
//获得动画资源
imageview.setBackgroundDrawable(ad);
// imageview.setBackgroundResource(R.drawable.animation_list);
// ad=(AnimationDrawable) imageview.getBackground();
// ad.setAlpha(80); //设置图片透明度
Button button=(Button) findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() { //点击按钮
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
ad.start();
}
});
button.setOnLongClickListener(new View.OnLongClickListener() { //长点击按钮
@Override
public boolean onLongClick(View arg0) {
// TODO Auto-generated method stub
ad.stop();
return true;
//return false;
}
});
}
上面的代码就实现了简单的动画效果了
除此之外:在AnimationDrawable中,我们还可以看到如下的几个重要方法:
setOneShot(boolean flag) 和在配置文件中进行配置一样,可以设置动画是否播放一次,false为连续播放;
addFrame (Drawable frame, int duration) 动态的添加一个图片进入该动画中
上一篇: 自己动手写操作系统(三)
推荐阅读
-
动画的使用1——Drawable Animation
-
Android动画篇——Drawable Animation(帧动画)
-
Drawable Animation (Drawable动画)
-
Android中Activity转场动画的使用
-
python之pandas的基本使用(1)
-
【iOS】一个取巧的弹出式动画实现以及后续的iOS动画学习(第一部分:基于CALayer的Core Animation框架)
-
图形报表echarts的使用1--折线图 博客分类: 图形报表echarts echarts折线图
-
android 各种控件颜色值的设置(使用Drawable,Color)
-
得到前i-1个数中比A[i]小的最大值,使用set,然后二分查找
-
用Adobe animate写动画课件时,经常用到的代码1