1

我有一个活动 (A) 在计算后启动另一个活动 (B)。我的问题是,当 Activity B 启动时,应该在大小增加(从 0.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. 对 Drawable 对象使用 setImageDrawable 而不是 setImageResource。
  2. 环境arrowImage.setFillBefore(false);

任何建议将不胜感激。

动画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>

4

1 回答 1

0

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

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);
}
于 2013-07-24T05:53:48.203 回答