在實現android火箭噴射時,比較難的一點就是既讓火箭有火苗噴射,又要使火箭加速上升,所以感覺實現起來有些麻煩,但是發現了一種新的方法,可以讓動畫再次動(當然由於直接給動畫加動畫我沒試過,所以不知道能不能那樣做)。廢話不多說,下面簡單說下我的實現過程。
動畫效果如下:
1. 首先是實現一個幀動畫,在res目錄下新建一個目錄anim,然後新建如下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="false"
>
<item android:drawable="@drawable/hjone" android:duration="50"></item>
<item android:drawable="@drawable/hjtwo" android:duration="50"></item>
<item android:drawable="@drawable/hjthree" android:duration="50"></item>
</animation-list>
2.把這個動畫以背景的形式添加到要顯示的ImageView中,在main.xml文件下實現,如下:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<ImageView
android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:src="@anim/animation" />
</RelativeLayout>
3.接下來就可以在mainactivity.java代碼實現了,具體過程如下:package com.example.animation;
import android.os.Bundle;
import android.view.View;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
import android.view.animation.TranslateAnimation;
import android.view.animation.Animation.AnimationListener;
import android.widget.ImageView;
import android.app.Activity;
import android.graphics.drawable.AnimationDrawable;
public class MainActivity extends Activity {
private AnimationDrawable animationDrawable;
private ImageView imageView;
final Animation traslation = new TranslateAnimation(0, 0, 0, -1000);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
start();
}
private void start() {
// TODO Auto-generated method stub
animationDrawable=(AnimationDrawable) imageView.getDrawable();
animationDrawable.start();
traslation.setDuration(800);
traslation.setInterpolator(new AccelerateInterpolator());
imageView.startAnimation(traslation);
traslation.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation arg0) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation arg0) {
// TODO Auto-generated method stub
imageView.setVisibility(View.GONE);
}
});
}
private void initView() {
// TODO Auto-generated method stub
imageView=(ImageView)findViewById(R.id.image);
imageView.setImageResource(R.anim.animation);
}
}