2010-11-18 22 views
20

イメージを水平に移動したい。 つまり、画像は左端の下隅から右端の下隅に一度移動する必要があります。 左端の下隅に戻ってくる必要はありません。私が試したコードのアニメーション翻訳

ピースは、これは右まで左から画像を移動

<set xmlns:android="http://schemas.android.com/apk/res/android" 
android:interpolator="@android:anim/linear_interpolator"> 

<translate android:fromXDelta="0%p" android:toXDelta="200%p" 
android:duration = "2000"/> 
</set> 

ました。しかし、再び左に来る。 誰も私にこれを解決する方法を教えてもらえますか?あなたは偉大な誤解みんなの犠牲に落ちたんだ

答えて

40

私はそれを得ました...そのアニメーションxmlファイルを使用する代わりに、私はJavaファイルを書きました。

Animation animation = new TranslateAnimation(0, 500,0, 0); 
animation.setDuration(1000); 
animation.setFillAfter(true); 
myImage.startAnimation(animation); 
myImage.setVisibility(0); 

ここで画像は左から右に移動し、その後は見えなくなります。 :)

+1

そのコードがなぜ機能するのかわかりません。たくさんの意味がありません。 'setVisibility()'メソッドで 'View.VISIBLE'を使ってみてください。 – Macarse

+0

setVisibility(0)ときどき動作しません...私はyを知りません...今はView.INVISIBLEを保持しています........ – Mathew

+6

実際にはINVISIBLEはint == 1、VISIBLE == 0、gone == 2、[ここ](http://developer.android.com/reference/android/view/View.html#attr_android:visibility) **私もコードのsetVisibilityに問題があったので、 .setVisibilityのView.VISIBLE/View.INVISIBLE ** – xxxxxxxxxadfas

69

は初のAndroidアニメーションについて作る:アニメーションImageView(または任意のビューの一種)が実際に移動(またはスケーリングまたは回転させたりフェージング)ではありません。それはすべてのトリックです...アニメーションは本質的に画面構成エンジンの最後の命令で、x/y、zなどでビューをオフセットします。ビューの基本的な位置/サイズ/角度/アルファは決して変わりません。

したがって、アニメーションが終了すると、イメージは実際には決して出てこないので、開始点に戻るように見えます。

つまり、<translate>タグにandroid:fillAfter="true"を追加することで、簡単に目的を達成できます。画像にはが実際に移動していないことを覚えておいてください。アニメーションの終了時にレイアウトを更新する必要がある場合は、AnimationListenerに接続し、onAnimationEnd()で行います。

+1

こんにちはReuben、私はアンドロイド:fillAfter = "true"としようとしました...しかし、前と同じ...その後、私はonAnimationEnd()で試してみました。私は目に見えないものとしてイメージの可視性を与えました...しかし、同じことが起こっています...私が間違って行ったことの手掛かりはありますか? – Mathew

+1

を使用していた可能性がありますが、今はほとんど問題ではありません。 –

+8

なぜそれは関係ないのですか?いくつかのコードはこれを素敵な答えにしていたでしょう –

15

翻訳アニメーションはオブジェクトの外観を変更できますが、オブジェクト自体を変更することはできません。つまり、翻訳アニメーションをビューに適用すると、アニメーションは新しい位置に移動しますが、そのクリックイベントは発生しません。クリックイベントは以前の位置でまだ発生します。

これは、ビューが元の位置にあるためです。これを克服するために、オブジェクトを実際に動かすObjectAnimationを使用することができます。 オブジェクトアニメーションは、実際にオブジェクトを移動する唯一のアニメーションです。

ObjectAnimatorを使用して、Translateアニメーションを作成できます。

ObjectAnimator transAnimation= ObjectAnimator.ofFloat(view, propertyName, fromX, toX); 
transAnimation.setDuration(3000);//set duration 
transAnimation.start();//start animation 

ビュー - このアニメーションは プロパティ名、アニメーション化されたプロパティを適用される上図です。 FromX、toX-時間の経過とともにアニメーションがアニメートされる一連の値。

+2

この回答であなたのリンクを使って交通量を増やすのは面倒です!リンクの腐敗を防ぐために、ここにそのリンクから要約を入れることをお勧めします。 – t0mm13b

+0

ObjectAnimatorはアンドロイド11から導入されました。したがって、アンドロイドの以前のバージョンでは、非公式のライブラリを使用する必要があります。これはNineOldAndroidsライブラリで、アンドロイド11のすべてのアニメーションAPIを見つけることができ、他のアンドロイドバージョンでも使用できます:http://nineoldandroids.com/ –