ListView问题中的按钮动画

时间:2012-10-16 05:34:59

标签: android listview scroll

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

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

旋转工作正常,但在一个周期完成时有些延迟。

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

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

1 个答案:

答案 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>