2013-03-27 10 views
5

をクリックするまで、アニメーションの方法applyTransformationがトリガされていない、私はこのアニメコードました:私はこれはとても奇妙である任意のレイアウトに

public class ExpandAnimation extends Animation { 
private View mAnimatedView; 
private MarginLayoutParams mViewLayoutParams; 
private int mMarginStart, mMarginEnd; 
private boolean mWasEndedAlready = false; 

/** 
* Initialize the animation 
* @param view The layout we want to animate 
* @param duration The duration of the animation, in ms 
*/ 
    public ExpandAnimation(View view, int duration) { 
     setDuration(duration); 
     mAnimatedView = view; 
     mViewLayoutParams = (MarginLayoutParams) view.getLayoutParams(); 

     mMarginStart = mViewLayoutParams.rightMargin; 
     mMarginEnd = (mMarginStart == 0 ? (0- view.getWidth()) : 0); 
     view.setVisibility(View.VISIBLE); 
     mAnimatedView.requestLayout(); 
    } 

    @Override 
    protected void applyTransformation(float interpolatedTime, Transformation t) { 
     super.applyTransformation(interpolatedTime, t); 
     if (interpolatedTime < 1.0f) { 
      // Calculating the new bottom margin, and setting it 
      mViewLayoutParams.rightMargin = mMarginStart 
        + (int) ((mMarginEnd - mMarginStart) * interpolatedTime); 
      // Invalidating the layout, making us seeing the changes we made 
      mAnimatedView.requestLayout(); 

     // Making sure we didn't run the ending before (it happens!) 
     } else if (!mWasEndedAlready) { 
      mViewLayoutParams.rightMargin = mMarginEnd; 
      mAnimatedView.requestLayout(); 
      mWasEndedAlready = true; 
     } 
    } 
} 

をそして、私はこのアニメーションを使用します。

View parent = (View) v.getParent(); 
View containerMenu = parent.findViewById(R.id.containerMenu); 
ExpandAnimation anim=new ExpandAnimation(containerMenu, 1000); 
containerMenu.startAnimation(anim); 

このアニメーションはレイアウトを切り替えます隠す/それを示す。

デフォルトでは、非表示になっています。クリックすると、アニメーションが動作して表示されます。もう一度クリックすると、正しく縮小されます。しかし、3回目は何もしません。私はデバッグして、コンストラクタがだが、applyTransformationではないことを知った。 どういうわけか、画面上のレイアウトをクリックすると、突然アニメーションが始まります。

編集 誰もが知っていますか?適用される変換はトリガーされますか?

+0

私は同じコードを使用していますが、全く同じ問題があります。 applyTranformationは、3回目以降の呼び出しはありません。何とかアニメーションをビュー上で再設定する必要があるようです。私はcontainerMenu.clearAnimation()を呼び出そうとしましたが、それは役に立ちません。 –

+0

私は何時間も戦ってきましたが、結果はまだありません... – Reinherd

+0

@NetWolf回避策を見つけることができました。私は答えとして投稿します。 – Reinherd

答えて

7

私は理由を理解できませんが、レイアウトをクリックするか、何らかのアクションを実行すると、アニメーションがついに始まります。だから、私はプログラムで回避策を追加しました。私は私のレイアウトでscrollviewをしましたので、私はスクロール位置を移動:

hscv.scrollTo(hscv.getScrollX()+1, hscv.getScrollY()+1); 

これだけcontainerMenu.startAnimation(anim);

これは単なる作品の後、私は理由を理解することはできません。

また、アンドロイド> 4ではいくつかのアニメーションが完璧に機能していましたが、たとえば2.3では同じ問題があり、拡大したり縮小したりすることはできませんでした。

parent.invalidate(); 

トリックはしましたか?

+1

鉱山は、ViewPagerの内側にあるフラグメント内にあります。アクティビティのビューページインスタンスを取得し、1ピクセルスクロールしてからアニメーションを呼び出した後にスクロールすることで回避できます。ヒントをありがとう! –

+0

@NetWolf私は 'parent.invalidate();'を追加しました。 2.3デバイスで動作するようです。 – Reinherd

+0

私はちょうど同じものを見つけたので、古い電話でテストしなければなりません。更新していただきありがとうございます。 –

関連する問題