我正在使用列表视图,其中我有下载按钮。
我想在点击事件上旋转按钮,直到某些后台下载过程正常工作。
旋转工作正常,但在一个周期完成时有些延迟。
主要问题是当按钮动画并且用户滚动列表时,不同行中的其他一些按钮也会启动动画。
我有一个布尔类型数组来保持按钮状态 isDownloading [] 。所以我得到该位置的按钮并开始动画,但它创建了问题
获取动画按钮的代码:
else if (isDownloading[position] == true)
{
holder.downloadListBtn.setBackgroundResource(R.drawable.downloading);
LinearLayout layout = (LinearLayout) holder.downloadListBtn.getParent();
Button button = (Button) layout.getChildAt(0);
ButtonAnimate(button);
}
设置动画按钮的代码:
public void ButtonAnimate(Button b)
{
RotateAnimation animation = new RotateAnimation(0, 360, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
animation.setDuration(4500);
animation.setRepeatCount(100);
b.startAnimation(animation);
}
答案 0 :(得分:3)
所有按钮都开始动画,因为它们具有相同的ID,当它们获得焦点时,它们开始动画。所以,你要做的是分配不同的ID或标签。
根据该ID和标记,使该按钮旋转。
点击按钮
尝试此代码 Rotater.runRotatorAnimation(this, v.getId());
public class Rotater {
public static void runRotatorAnimation(Activity act, int viewId) {
// load animation XML resource under res/anim
Animation animation = AnimationUtils.loadAnimation(act, R.anim.rotate);
if (animation == null) {
return; // here, we don't care
}
// reset initialization state
animation.reset();
// find View by its id attribute in the XML
View v = act.findViewById(viewId);
// cancel any pending animation and start this one
if (v != null) {
v.clearAnimation();
v.startAnimation(animation);
}
}
}
这里是rotate.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/linear_interpolator" >
<rotate
android:duration="2000"
android:fromDegrees="0"
android:pivotX="50%"
android:pivotY="50%"
android:repeatCount="infinite"
android:startOffset="0"
android:toDegrees="360" >
</rotate>