3

私はRelativeLayout(さまざまな位置で、マージンを使用)でいくつかのビューを持っているアプリケーションを作成していて、ハニカムの新しいアニメーションAPIを使ってアニメーション化しています。 アニメーションは繰り返していますが、繰り返しごとにある程度の時間を待つ必要があるため、リピートモードは使用できません。開始後にアンドロイドでAnimatorを停止できません

すべてがうまくいくが、別の場所に移動してアニメーションを停止したいときに部分がありますが、停止することはできません。私はそれらを動かしていると彼らは表示されず、突然私はそれらがまだアニメーションされているように彼らが通り過ぎていくのを見ます。 考えられる方法を試しました。私を助けてください。

コード:

if(!mMoving){ 
      mMoving = true; 
      for(int i = 0; i < mImagesList.size(); i++){ 

       final LinearLayout f = mImagesList.get(i); 
       if(mMoving){ 
        ObjectAnimator anim = ObjectAnimator.ofFloat(f, "x", Math.round(mScreenWidth * 1.4)); 
        mAnimators.add(anim); 
        anim.setDuration(mRandom.nextInt(10000) + 8000); 
        anim.setStartDelay((mRandom.nextInt(4000) + 3000) * (i/ITEMS_PER_SCREEN)); 
        anim.addListener(new AnimatorListener() { 


         @Override 
         public void onAnimationEnd(Animator animation) { 
          if(mMoving){ 
          mAnimators.remove(animation); 

           ImageView img = (ImageView)f.findViewById(R.id.stream_feed_item_pic); 
           int picWidth = img.getDrawable().getIntrinsicWidth(); 

           Animator anim = ObjectAnimator.ofFloat(f, "x", -Math.round(picWidth * 1.4), Math.round(mScreenWidth * 1.2)); 

           mAnimators.set(mAnimators.indexOf(animation), anim); 

           anim.setDuration(mRandom.nextInt(14000) + 8000); 
           anim.setStartDelay((mRandom.nextInt(6000) + 3000) * (mImagesList.size()/ITEMS_PER_SCREEN)); 
           anim.addListener(this); 
           anim.start(); 
          } 
         } 
        }); 
        anim.start(); 
       } 
      } 
      mMoving = true; 
      return true; 
     } 

あなたは私がリスナーを持っており、すべてのアニメーション終わりに、リスナーが呼び出されて、新しいアニメーションが作成されたアニメーターを作成し、開始遅延を取得していますすべての画像のために見ることができるように。すべてのアニメーションをリストに保存します。

if(mMoving){ 
        mMoving = false; 
        for(Animator anim : mAnimators){ 
         anim.setStartDelay(0); 
         anim.setDuration(0); 
         anim.start(); 
         anim.cancel(); 
         anim.removeAllListeners(); 
         anim.setTarget(null); 
        } 
        mAnimators.clear(); 
       } 

これは私が別のレイアウトに移動する方法です:

これは、それらを停止するために私の(必死)の試みです

mContainer.removeAllViews(); 
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(picWidth, picHeight); 
      params.leftMargin = 0; 
      params.topMargin = 0; 
      if(size == SMALL_SIZE){ 
       if(mSmallCounter < mSmallIdList.length){ 
        RelativeLayout frame = (RelativeLayout)findViewById(mSmallIdList[mSmallCounter++]); 
        frame.addView(f, params); 
       } 
      } 

私はおよそ百の方法を試してみました非常に必死ですよ!

注:これは、私はまだ答えをPRE-3.0

+0

私は同じ問題を抱えています。あなたは解決策を見つけましたか? – anakin78z

+0

いいえ、それは私がこれまでに受けた中で最も印象的なものの一つです。あなたが何か答えを見つけたら教えてください。 – Elad92

答えて

1

OF ANIMATORないでアニメーションを使用していない'MハニカムAPIですか?遅すぎるかもしれませんが、読者にはこれが解決策です。

anim.setRepeatCount(0); 
+0

私のために働いていません。 AnimatorSetでObjectAnimatorタイプを使用していて、そのrepeatCountとrepeatMode、またはどちらか一方を設定すると、それらを停止していません。 – wkhatch

関連する問題