android animation动画【学习】
程序员文章站
2022-03-09 20:16:09
...
两种实现方式:
①Tween Animation 。
②Frame Animation是顺序播放事先做好的图像,跟电影类似。
第二种方法相对比较简单,做个demo:
res/anim/loading_anim.xml :
<?xml version="1.0" encoding="UTF-8"?> <!-- 使用Frame Animation方式实现动画的格式是: 首先是animation-list根节点,animation-list根节点中包含多个item子节点,每个item节点定义一帧动画 XML属性及其说明 drawable 当前帧引用的drawable资源 duration 当前帧显示的时间(毫秒为单位) oneshot 如果为true,表示动画只播放一次停止在最后一帧上,如果设置为false表示动画循环播放。 variablePadding If true, allows the drawable’s padding to change based on the current state that is selected. visible 规定drawable的初始可见性,默认为flase --> <animation-list android:oneshot="false" xmlns:android="http://schemas.android.com/apk/res/android"> <item android:duration="200" android:drawable="@drawable/loading1" /> <item android:duration="200" android:drawable="@drawable/loading2" /> <item android:duration="200" android:drawable="@drawable/loading3" /> <item android:duration="200" android:drawable="@drawable/loading4" /> <item android:duration="200" android:drawable="@drawable/loading5" /> <item android:duration="200" android:drawable="@drawable/loading6" /> <item android:duration="200" android:drawable="@drawable/loading7" /> <item android:duration="200" android:drawable="@drawable/loading8" /> </animation-list>
WelcomeAct:
public class WelcomeAct extends Activity {
private AnimationDrawable rocketAnimation;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 设置登录无标题栏
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.welcome);
// ProgressBar loading = (ProgressBar)findViewById(R.id.loading);
// loading.setVisibility(View.VISIBLE);
ImageView rocketImage = (ImageView) findViewById(R.id.loading);
rocketImage.setBackgroundResource(R.anim.loading_anim);
rocketAnimation = (AnimationDrawable)rocketImage.getBackground();
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
}
注意:启动Frame Animation动画的代码rocketAnimation.start();不能在OnCreate()中,因为在OnCreate()中AnimationDrawable还没有完全的与ImageView绑定,在OnCreate()中启动动画,就只能看到第一张图片。
Android SDK中对AnimationDrawable的介绍:
AnimationDrawable |
|
获取、设置动画的属性 | |
int getDuration() | 获取动画的时长 |
int getNumberOfFrames() | 获取动画的帧数 |
boolean isOneShot()
Void setOneShot(boolean oneshot) |
获取oneshot属性 设置oneshot属性 |
void inflate(Resurce r,XmlPullParser p, AttributeSet attrs) |
|
增加、获取帧动画 | |
Drawable getFrame(int index) | 获取某帧的Drawable资源 |
void addFrame(Drawable frame,int duration) | 为当前动画增加帧(资源,持续时长) |
动画控制 | |
void start() | 开始动画 |
void run() | 外界不能直接掉调用,使用start()替代 |
boolean isRunning() | 当前动画是否在运行 |
void stop() | 停止当前动画 |
推荐阅读
-
一看就喜欢的loading动画效果Android分析实现
-
Android实现卡片翻转动画
-
Android属性动画Property Animation系列一之ObjectAnimator_html/css_WEB-ITnose
-
简单谈谈Core Animation 动画效果
-
深入浅出学习Android ListView基础
-
Android自定义view绘制圆环占比动画
-
Android开发艺术探索学习笔记(七)
-
Android逐帧动画实现代码
-
学习Android Material Design(RecyclerView代替ListView)
-
Android动画之渐变动画(Tween Animation)详解 (渐变、缩放、位移、旋转)