奇怪的行为ScaleAnimation setFillAfter(true)/ false

时间:2012-10-26 15:43:56

标签: android animation matrix touch imageview

我们正在使用TouchImageView并希望实现onDoubleTap缩放... 到目前为止一切顺利。

问题是:

如果我们应用比例动画并设置 setFillAfter(false),则在AnimationListener.onAnimationEnd中,我们将正确矩阵应用于imageview,一切按预期工作(滚动,其他缩放手势等)。 - >但是 - 你会在屏幕上看到一个小小的噼啪声(这是可以理解的 - 因为动画会跳回到开头,之后会应用矩阵变化)

另一方,如果 setFillEnabled(true),动画看起来很棒,没有任何瑕疵,但不知何故视图完全搞砸了,起初一切看起来都很棒,但最大和最小缩放级别完全混乱 - 你不能再缩小到初始缩放,而且移动图片不起作用正如所料 - 边界是假的?类似的东西)

所以我们的问题;)?
- 使用setFillAfter(true)的ScaleAnimation实际上做了什么? - 它是否会改变(完整)图像视图的大小?
- 出了什么问题:/?

一如既往地感谢您的帮助:=) 欢呼声,

//顺便说一句:这种情况发生在所有 Android版本< = 4 中,在4.1上描述的问题没有发生,并且每个人都按预期工作。

---------------
更新
所以当前的代码是这样的,有效,(不再有缩放问题)但在设置矩阵和清除动画之间有一个小的“闪烁”(尽管)代码显示,它应该应用矩阵 - 之前 - 动画得到清理,所以我希望无缝过渡...... thx您的回复!

            Log.v("TouchImageView", "Zoom in");
            ScaleAnimation zoomIn = new ScaleAnimation(saveScale, SCALE_DOUBLE_TAP, saveScale, SCALE_DOUBLE_TAP, width / 2, height / 2);
            zoomIn.setDuration(200);
            zoomIn.setFillAfter(true);
            zoomIn.setAnimationListener(new AnimationListener() {

                @Override
                public void onAnimationStart(Animation animation) {
                    isAnimating = true;
                    saveScale = SCALE_DOUBLE_TAP;
                    right = width * saveScale - width - (2 * redundantXSpace * saveScale);
                    bottom = height * saveScale - height - (2 * redundantYSpace * saveScale);
                }

                @Override
                public void onAnimationRepeat(Animation animation) {

                }

                @Override
                public void onAnimationEnd(Animation animation) {
                    isAnimating = false;
                    matrix.postScale(SCALE_DOUBLE_TAP, SCALE_DOUBLE_TAP, width / 2, height / 2);
                    matrix.getValues(matrixValues);
                    setImageMatrix(matrix);
                    clearAnimation();
                }
            });


            startAnimation(zoomIn);

1 个答案:

答案 0 :(得分:5)

setFillAfter(true)会伪造它实际缩放,我建议将它与矩阵缩放结合使用。在动画结束时,应用矩阵并在应用动画的clearAnimation()上调用View。这应该可以修复闪烁。