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