1

我正在使用一个列表视图,其中有下载按钮。

我想在单击事件上旋转按钮,直到某些后台下载过程正常工作。

旋转工作正常,但一个周期完成时会出现一些延迟。

主要问题是当按钮动画并且用户滚动列表时,不同行中的其他一些按钮也会启动动画。

我有一个布尔类型数组来保持按钮状态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);
        }
4

1 回答 1

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>

于 2012-10-16T06:18:26.863 回答