我有一个带背景位图的LinearLayout。我用动画为这个版面添加了2-3个图像。问题是:每当我添加图像时,FIRST图像动画从左上角开始,对于该动画之后的所有其他图像,它从中心开始工作得很好。我挣扎了好几天才找到解决这个小烦人的问题的方法。你有什么可能导致这个的建议吗?
这是我在gif中的问题:http://imgur.com/FCPgof1
我的动画:`
<scale
android:duration="750"
android:fillAfter="false"
android:fromXScale="0"
android:fromYScale="0.0"
android:interpolator="@android:anim/accelerate_decelerate_interpolator"
android:pivotX="50%"
android:pivotY="50%"
android:toXScale="1.0"
android:toYScale="1.0" />
`
我的布局:
<LinearLayout
android:id="@+id/layoutCompareUppoints"
android:layout_width="140dp"
android:layout_height="28dp"
android:background="@drawable/uppballsbgnew" >
</LinearLayout>
我的代码: `private void animUppointsBefore(){
if (k < Integer.valueOf(uppoints)) {
Animation a = AnimationUtils.loadAnimation(this,
R.anim.debug_grow_fast_animation);
ImageView upp = new ImageView(this);
upp.setImageResource(R.drawable.uppballlightnew);
upp.setAdjustViewBounds(true);
uppLayout.addView(upp);
upp.startAnimation(a);
a.setAnimationListener(new AnimationListener() {
@Override
public void onAnimationStart(Animation a) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationRepeat(Animation a) {
// TODO Auto-generated method stub
}
@Override
public void onAnimationEnd(Animation a) {
// TODO Auto-generated method stub
k++;
animUppointsBefore();
}
});
}
}`
答案 0 :(得分:0)
您最有可能看到的问题是,在实际发生任何动画之前,图像会被添加到布局中。图像将开始全尺寸,缩小到0,然后长到1。
您要做的是在添加它之前使其不可见,然后使其显示在屏幕外。您可以使用几种方法,通常的方法是将ImageView
设置为View#INVISIBLE
,然后设置为Animation#AnimationListener
,在动画启动时将视图设置为View#VISIBLE
。
如果可以,使用Animators会更容易(支持库中有一些库不允许这样做)。您可以在添加之前将View的Alpha设置为0,然后在动画中立即将其设置为1。只需制作两个ObjectAnimators
,一个用于alpha,一个用于缩放,然后将它们合并为一个AnimatorSet
。
编辑:
将评论的最终答案放在这里。
不是在动画制作之前添加视图,而是将图像视图放在布局中但不可见。这样,就不需要新的布局和测量通道,可能会将测量结果拧到枢轴点。