6

左から右にゆっくりと表示されるように、ImageView をアニメーション化しようとしています。以前こちらに伺った際、何が欲しいのか説明がつかず困っていたので、今回はHTML/JSを使って希望のエフェクトを作成しました。

http://jsfiddle.net/E2uDE/

Android でこの効果を得るための最良の方法は何でしょうか?

scaleType を変更してから、ScaleAnimation をその ImageView に直接適用してみました。

レイアウト:

<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"
    />

ジャワ:

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);

しかし、これはまだ画像をスケーリングします。

また、FrameLayout をアニメーション化できることを期待して、ImageView を FrameLayout でラップしようとしました。

<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 をスケーリングしようとします。

4

2 に答える 2

9

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

この手法を説明するサンプルコードをいくつか作成しました。プロジェクトをダウンロード/ビルド/実行する場合、画像をクリックするとリビールアニメーションが実行されます。

次の基本構造を持つCoveredImageViewonDrawクラスのメソッドを見てください。

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

クリップが調整されてからinvalidate()が呼び出され、onDraw()が再度呼び出されます。

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

于 2012-12-17T15:29:50.337 に答える
0

イメージビューを別のイメージ ビューと重ねることができます。次に、幅が 0 になるまでスケールを気にせずにオーバーラップするイメージビューをアニメーション化し、それを削除できます。それが機能するには、imageView を RelativeLayout ofc に配置する必要があります。

于 2012-12-17T15:20:21.220 に答える