2012-12-13 4 views
6

ImageViewをアニメーション化しようとしていますので、ゆっくりと左から右に表示されます。 ときI asked this before私は私が望んでいたかを説明するためにトラブルを抱えていたので、今回は私がHTML/JSを使用して所望の効果を作成しました:スケーリングせずにImageViewの幅をアニメ化する

http://jsfiddle.net/E2uDE/

のAndroidにこの効果を得るための最良の方法だろうか?

私はscaleTypeを変更し、そのImageViewのに直接ScaleAnimationを適用してみました:

レイアウト:

<ImageView 
    android:id="@+id/graphImage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:scaleType="centerCrop" 
    android:background="@android:color/transparent" 
    android:contentDescription="@string/stroom_grafiek" 
    /> 

のJava:

scale = new ScaleAnimation((float)0, 
     (float)1, (float)1, (float)1, 
     Animation.RELATIVE_TO_SELF, (float)0, 
     Animation.RELATIVE_TO_SELF, (float)1); 
scale.setDuration(1000); 

graphImage.startAnimation(scale); 

をしかし、これはSTILスケール画像。

また、私はちょうどでframeLayoutをアニメーション可能性が期待して、でframeLayoutでImageViewのをラップ試してみました:

<FrameLayout 
    android:layout_width="70dp" 
    android:layout_height="fill_parent" 
    android:clipChildren="true""> 
    <ImageView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="bottom|left|clip_horizontal" /> 
</FrameLayout> 

これはまだでframeLayoutの内側に収まるように私のImageViewのを拡張しようとします。

+0

多分Androidを使用してアニメーションがお手伝いしますか? –

答えて

9

これを行うにはいくつかの方法があります.1つは、画像を描画するImageViewのキャンバス上のクリップ(ビューが描画できる領域)を変更することです。描画境界の右端をゆっくりと増加させると、例のリンクと同じ効果が得られます。

このテクニックを示すexample codeを書いています。プロジェクトをダウンロード/ビルド/実行する場合、画像をクリックすると公開アニメーションが実行されます。再び呼び出されるonDraw()を引き起こし、クリップと呼ばれる)を調整した後(無効化され

@Override 
protected void onDraw(Canvas canvas) { 
    ... 
    canvas.getClipBounds(mRect); 
    mRect.right = ...; 
    canvas.clipRect(mRect); 
    ... 
    super.onDraw(canvas); 
    ... 
    invalidate(); 
} 

は、以下の基本構造を有するCoveredImageViewクラスのonDraw方法を見てください。

私はまた、Androidの特定のバージョンに依存しない経過時間から正しいクリップ値を補間するためのコードを書いています。しかし、メモとして、Android 3.0から、新しいアニメーションフレームワークとそのようなタスクを実行するのに役立つValueAnimatorクラスがあります。

+0

@antonytあなたが私に与えたGithubのリンクには、genフォルダもありません。どのバージョンをサポートしているのかは分かりません。どのようにプロジェクトを使ってアニメーションを見ることができますか?Genフォルダはautomaticalllyで生成されますが、そのようにする –

+0

私は任意にAPIレベル7(v2.1)を最小値として選択しましたが、おそらく低くなる可能性があります - これはマニフェストで指定されています。しかし、このプロジェクトはAPI 17(4.2)でコンパイルされています。コンパイル時にGenが自動的に作成されます(おそらく、プロジェクトのビルドに問題があります)。詳細は、Eclipseの「Problems」ウィンドウを参照してください。 – antonyt

0

イメージビューを別のイメージビューと重複させることができます。たとえば、白い描画可能なものなどです。次に、幅が0になるまでスケールを気にせずにオーバーラップするイメージビューをアニメーション化して削除することができます。そのためには、あなたのimageViewをRelativeLayout ofcに配置する必要があります。

関連する問題