在补间动画之前显示Drawable

时间:2013-07-24 01:51:54

标签: android animation drawable android-animation

我有一个活动(A)在计算后启动另一个活动(B)。我的问题是,当活动B启动时,在开始补间动画之前,在大小递增(从.33缩放到1)时应该从左向右移动的箭头可绘制在很短的时间内首先显示。最终结果是在开始制作动画之前,完全尺寸可绘制的一个令人烦恼的闪烁。

一切似乎都表明问题与动画文件(.xml)有关,而与java类无关。当我删除以下代码中的行arrowImage.startAnimation(arrowExtent);时,可以观察到这一点:

protected void arrowAnimation(Animation arrowExtent) {
        // TODO Auto-generated method stub

        arrowImage.setImageResource(R.drawable.arrowimage);
        arrowImage.startAnimation(arrowExtent);
        arrowExtent.setFillAfter(true);

我尝试了以下内容:

  1. 使用setImageDrawable而不是setImageResource到Drawable对象。
  2. 设置arrowImage.setFillBefore(false);
  3. 非常感谢任何建议。

    动画xml如下:

    <?xml version="1.0" encoding="utf-8"?>
    

    <set android:interpolator="@android:anim/accelerate_decelerate_interpolator">
        <scale
           android:fromXScale="0.33"
           android:toXScale="1.0"
           android:fromYScale="0.0"
           android:toYScale="1.0"
           android:pivotX="50%"
           android:pivotY="50%"
           android:startOffset="0"
           android:duration="1000"
           android:fillBefore="false" />
    
        <translate 
           android:fromXDelta="0%"
           android:toXDelta="75%p"
           android:duration="1000" />
    
    </set>
    

1 个答案:

答案 0 :(得分:0)

当活动开始时,您应该ImageViewxmlonCreate()不可见,并且当动画开始时,您应该将其更改为可见。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    // referencing views etc. 
    arrowImage.setVisibility(View.INVISIBLE);
    // or make image invisible in xml
}

protected void arrowAnimation(Animation arrowExtent) {
    arrowExtent.setAnimationListener(new AnimationListener() {

        @Override
        public void onAnimationStart(Animation animation) {
            arrowImage.setVisibility(View.VISIBLE);
        }

        @Override
        public void onAnimationRepeat(Animation animation) { }

        @Override
        public void onAnimationEnd(Animation animation) { }
    });

    arrowImage.setImageResource(R.drawable.arrowimage);
    arrowImage.startAnimation(arrowExtent);
}