2012-12-13 37 views
6

我试图给ImageView设置动画,所以它从左到右缓慢地显示。 当I asked this before我有麻烦解释一下我想要的东西,所以这一次我创建使用HTML/JS预期的效果:Animate ImageView width without scaling

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

的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里包裹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> 

这仍然会尝试扩大我的ImageView以适合的FrameLayout里面。

+0

也许使用Android动画会帮助你? –

回答

9

有几种方法可以做到这一点 - 一种方法是简单地更改绘制图像的画布上的剪辑(即允许绘制视图的区域)的ImageView。缓慢增加绘制边界的右边将产生与示例链接中相同的效果。

我写了一些example code说明了这种技术。如果你下载/构建/运行项目,点击图像将运行揭示动画。

看一看在CoveredImageView类的onDraw方法,其具有以下基本结构:

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

夹子被调整,然后无效()被调用,从而引起的onDraw()来再次调用。

我也写了一些代码来插入从经过的时间,这不依赖于任何特定的Android版本的权利剪辑值。但是,从Android 3.0开始,有一个新的动画框架和一个可以帮助完成这些任务的类。

+0

@antonyt你给我的Github链接没有gen文件夹以及它支持哪个版本它没有阐明我如何使用该项目来查看动画,根据我Gen文件夹是自动生成的,但它不是这样做 –

+0

我随意选择API级别7(v2.1)作为最低限度,但它可能会降低 - 这是在清单中指定的。但是,该项目使用API​​ 17(4.2)进行编译。Gen在编译时会自动创建 - 也许您在构建项目时遇到问题 - 请查看Eclipse中的“Problems”窗口以获取更多详细信息。 – antonyt

0

你可以重叠你的imageview与另一个,例如一个纯白色drawable。然后,您可以动画重叠的图像视图,而不必担心缩放,直到其宽度为0并将其删除。为了这个工作,你必须把你的imageView放在一个RelativeLayout ofc中。