2012-04-17 10 views
1

私はこれをプロジェクト前のAPI11に必要とします。Androidのアニメーション表示が、現在のフルスクリーン表示をプッシュする画面に入っています

右からビューを追加する方法を探していると、現在の全画面表示が左に移動し、新しい表示が画面内に表示されます。

新しいビューは画面幅の約3分の1なので、現在の画面ビューを画面から移動させる距離です。

私はアニメーションに満足していますが、TranslateAnimation()でさまざまな解決策を疲れました。元のビューのすべてのクリック可能な領域に問題があります。

私はそれを正確に負のマージンで配置するためにレイアウトを再生し始めましたが、新しいレイアウト要求が来た数秒後にビューがポップされて元に戻りました。また、このソリューションは、アニメーションの終了リスナーでビューを移動するときに不安定な効果がありました。

新しいビューが出入りしているときに良いアニメーションを持ち、レイアウトの観点から正しい場所にビューを配置する最もシンプルなソリューションは何でしょうか。

答えて

0

fillAfterとfillEnabledを使用する代わりに、アニメーションリスナーのonAnimationEndのレイアウトをプログラムで変更して、最終的な配置に合わせる必要があります。

フリッカーを削除するには、アニメーション化しているビューのonAnimationEndでclearAnimation()を呼び出します。

+0

これは私がやっていたことです。 view.layout(新しい座標)を呼び出した後、ビューが正しい場所に移動しますが(xに負のマージンも必要です)、しばらくしてからレイアウトが再度呼び出され、ビューが元の位置にスナップします。私は、レイアウトを拡張し、正しい位置を反映するためにレイアウト(r、t、l、b)の値を変更したことを確認する様々な方法を試しました。 – totem

+0

コードを投稿できますか?私はあなたが何を正確に言及しているのかはっきりしていません。 –

10

API11を使用しているので、Animator APIを使用してください。すべてのビューは、対応するセッターとゲッターを持つプロパティを持つようになりました。 、スコープの外に左にビューをシフトスクリーンの幅を取得するには、その後の操作を行います。

View viewToShiftOut = getOutView(); 
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen); 
outAnim.setDuration(1000); 
outAnim.start(); 

をこれは、ビューをシフトし、それは1秒(1000ミリ秒)の期間中、完全に画面外の内容です。それの場所に1をシフトするには次の操作を行います。アニメーションが終了したときに行われますので

View viewToShiftIn = getInView(); 
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftIn, "x", widthOfScreen, 0); 
inAnim.setDuration(1000); 
inAnim.start(); 

などすべてのプロパティ、クリック可能な領域は、ビューに従います。あなたはそのように一緒にそれらをアニメーション化することができます

View viewToShiftOut = getOutView(); 
View viewToShiftIn = getInView(); 
ObjectAnimator outAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", 0, -widthOfScreen); 
ObjectAnimator inAnim = ObjectAnimator.ofFloat(viewToShiftOut, "x", widthOfScreen, 0); 
outAnim.setDuration(1000); 
inAnim.setDuration(1000); 
outAnim.start(); 
inAnim.start(); 

Blog post

EDITを:私はあなただけの1 /第3回でビューをシフトしたかった気づいた、あなたはwidthOfScreen/3によってそれぞれシフトするピクセルの量を得ることができるので、 。

EDIT 2:もう1つの利点は、ハードウェアアクセラレーションで、ほとんどの3.0+タブレットに問題なく使用できます。

+0

私の間違いは、明らかに私はpre API 11、setX setYまたはオブジェクトアニメーターを意味しませんでした。 – totem

+0

私はそれに多くの経験がありません。人々がそれを行う通常の方法は、それに応じて利益率を設定することだと思います。この場合、シフトアウトしているビューの左右のマージンをプログラムで設定する必要があります。負のマージンでは、ビューが画面外にシフトします。あなたがシフトインしているビューは、 'screensize - viewWidth'の左余​​白と' 0'の右マージンを持ちます。 'requestLayout()'を呼び出すと、すべてを設定する必要があります。私はそれをやったことがないので、私は答えとしてそれを入れませんが、それは私にとってうまくいくようです。 – DeeV

関連する問題