android旋转帧动画,Android单帧动画Rotate旋转
项目有一个需求,有一个刷新按钮,上面放着一个常见的静止的刷新圆圈,如下图:一旦用户按了刷新按钮,需要让这个刷新圆圈转动起来,让用户感觉到程序还在运行着,而不是卡死了。有两个思路,一是将这个图按照旋转时间不同旋转成不同旋转角度的图片,就像要做一张gif图片一样,例如我要每次旋转30度,就需要360\30=12张图片,然后再anim文件夹下新建xml文件,内容如下:Xml代码 android:one.
项目有一个需求,有一个刷新按钮,上面放着一个常见的静止的刷新圆圈,如下图:
一旦用户按了刷新按钮,需要让这个刷新圆圈转动起来,让用户感觉到程序还在运行着,而不是卡死了。
有两个思路,一是将这个图按照旋转时间不同旋转成不同旋转角度的图片,就像要做一张gif图片一样,例如我要每次旋转30度,就需要360\30=12张图片,然后再anim文件夹下新建xml文件,内容如下:
Xml代码
android:oneshot="true">
android:oneshot="true">
在代码中这样写:
Java代码
AnimationDrawable rocketAnimation;
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.anim.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}
publicbooleanonTouchEvent(MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
returntrue;
}
returnsuper.onTouchEvent(event);
}
AnimationDrawable rocketAnimation;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ImageView rocketImage = (ImageView) findViewById(R.id.rocket_image);
rocketImage.setBackgroundResource(R.anim.rocket_thrust);
rocketAnimation = (AnimationDrawable) rocketImage.getBackground();
}
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
rocketAnimation.start();
return true;
}
return super.onTouchEvent(event);
}
这种做法其实就是将每一帧图片都显示了一次,但是由于需要更多图片,文件体积会上升。
但是作者没能实现循环旋转,我尝试了下,修改了下anim文件的格式,成功了
Xml代码
android:fromDegrees="0"android:toDegrees="+360"android:duration="1000"
android:pivotX="50%"android:pivotY="50%"android:repeatCount="infinite"/>
android:fromDegrees="0" android:toDegrees="+360" android:duration="1000"
android:pivotX="50%" android:pivotY="50%" android:repeatCount="infinite" />
其中android:duration="1000"表示旋转速率是1秒钟。
代码:
Java代码
packageinfo.wegosoft;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.view.animation.Animation;
importandroid.view.animation.AnimationUtils;
publicclassLoadingAnimationTestextendsActivity {
@Override
publicvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.round_loading);
findViewById(R.id.loadingBtn).startAnimation(anim);
}
}
package info.wegosoft;
import android.app.Activity;
import android.os.Bundle;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
public class LoadingAnimationTest extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Animation anim = AnimationUtils.loadAnimation(this, R.anim.round_loading);
findViewById(R.id.loadingBtn).startAnimation(anim);
}
}
布局文件:
Java代码
android:orientation="vertical"android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="wrap_content"android:background="@drawable/refresh_normal">
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
android:layout_height="wrap_content" android:background="@drawable/refresh_normal">
工程见附件。
注意其中的匀速插值器LinearInterpolator似乎不能设置速率,我在这浪费了很多时间。
更多推荐
所有评论(0)