旋转图像。动画列表还是动画旋转?(安卓)
旋转图像。动画列表还是动画旋转?(安卓)
我想创建一个旋转进度图像,想知道最好的方法是什么。我可以用动画列表让12张图片每100毫秒更换一次,这样可以很好地工作,但为每个尺寸和分辨率创建12张图片会很麻烦:
我认为一个更简单的解决方案是为每个分辨率使用一个图像,而是为每个帧旋转它。在平台资源(android-sdk-windows/platforms...)中,我发现文件drawable/search_spinner.xml中的animated-rotate,但是如果我复制代码,就会出现编译器错误,它抱怨android:framesCount和android:frameDuration(在Eclipse中使用Google APIs 2.2):
我还尝试过使用重复的旋转动画(在anim资源文件夹中使用),但实际上我更喜欢动画列表版本的外观。那么解决这个问题的推荐方法是什么?
admin 更改状态以发布 2023年5月23日
Praveen提出的旋转drawable
无法让你控制帧数。假设你想要实现一个由8个部分组成的自定义加载器:
使用animation-list
方法,你需要手动创建8个按45*frameNumber
度旋转的帧。或者,你可以使用第一个帧并对其设置旋转动画:
文件res/anim/progress_anim.xml
:
文件MainActivity.java
:
Animation a = AnimationUtils.loadAnimation(getContext(), R.anim.progress_anim); a.setDuration(1000); imageView.startAnimation(a);
这将给你平滑的动画,而不是8步骤的。为了解决这个问题,我们需要实现自定义插值器:
a.setInterpolator(new Interpolator() { private final int frameCount = 8; @Override public float getInterpolation(float input) { return (float)Math.floor(input*frameCount)/frameCount; } });
你也可以创建一个自定义控件:
文件res/values/attrs.xml
:
文件ProgressView.java
:
public class ProgressView extends ImageView { public ProgressView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setAnimation(attrs); } public ProgressView(Context context, AttributeSet attrs) { super(context, attrs); setAnimation(attrs); } public ProgressView(Context context) { super(context); } private void setAnimation(AttributeSet attrs) { TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ProgressView); int frameCount = a.getInt(R.styleable.ProgressView_frameCount, 12); int duration = a.getInt(R.styleable.ProgressView_duration, 1000); a.recycle(); setAnimation(frameCount, duration); } public void setAnimation(final int frameCount, final int duration) { Animation a = AnimationUtils.loadAnimation(getContext(), R.anim.progress_anim); a.setDuration(duration); a.setInterpolator(new Interpolator() { @Override public float getInterpolation(float input) { return (float)Math.floor(input*frameCount)/frameCount; } }); startAnimation(a); } }
文件activity_main.xml
:
文件res/anim/progress_anim.xml
:如上所述