1

ダウンロード用のボタンがあるリストビューを使用しています。

バックグラウンドのダウンロードプロセスが機能するまで、クリックイベントでボタンを回転させたいです。

回転は正常に機能しますが、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

All of button starts animating because they are having same id, when they got focus they starts animating. so, what you have to do is assign different ids or tags.

On the basis of that id and tag, make that button rotate.

try this code on button click

 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);
    }
}
 }

here is 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 に答える