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

cV2*_*cV2 2 animation android matrix touch imageview

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

问题是:

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

另一方面,如果setFillEnabled(true),动画看起来很棒,没有噼啪声,但不知怎的,视图完全搞砸了,起初一切看起来都很棒,但最大和最小缩放级别完全搞砸了 - 你无法缩小再次进行初始缩放,并且移动图片也没有按预期工作 - 边框是假的?类似的东西)

那么我们的问题;)?
- 具有setFillAfter(true)的ScaleAnimation实际上做了什么?
- 它是否会改变(完整)imageview的大小?
- 出了什么问题:/?

一如既往地感谢你的帮助:=)干杯,

//顺便说一句:这发生在所有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);
Run Code Online (Sandbox Code Playgroud)

Han*_*oit 5

setFillAfter(true)会假设它实际上是缩放的,我建议将它与矩阵缩放结合使用.在动画结束应用矩阵,并呼吁clearAnimation()View该动画的应用上.这应该可以修复闪烁.