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

但这仍然会缩放图像。

我还尝试将 ImageView 包装在 FrameLayout 中,希望我可以为 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>

这仍然会尝试缩放我的 ImageView 以适应 FrameLayout。

4

2 回答 2

9

有几种方法可以做到这一点 - 一种方法是简单地更改画布上的剪辑(即允许绘制视图的区域)来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 回答