我想在我的应用程序中实现Telegram,如图像放大和缩小动画。查看他们的源代码,我看到类ClippingImageView
通过使用属性动画制作器来设置此效果的动画。问题是,当我尝试将此应用到我的应用时,我的视图getLeft()
和getTop()
不在(0,0)。因此setTranslationX()
和setTranslationY()
得错了,因为animationValues
计算为(0,0)。
有没有办法让View
位于(0,0),实际的图像内容占据屏幕的另一部分,如右上角?
修改
这是我到目前为止所尝试的,显然这只是我克隆到我的应用程序的Telegram源代码的一部分。
animationValues
存储属性的起始值和结束值。
animationValues[0][0] = animatingImageView.getScaleX();
animationValues[0][1] = animatingImageView.getScaleY();
animationValues[0][2] = animatingImageView.getTranslationX();
animationValues[0][3] = animatingImageView.getTranslationY();
animationValues[0][4] = clipHorizontal * object.scale;
animationValues[0][5] = clipTop * object.scale;
animationValues[0][6] = clipBottom * object.scale;
animationValues[0][7] = animatingImageView.getRadius();
animationValues[1][0] = scale;
animationValues[1][1] = scale;
animationValues[1][2] = xPos;
animationValues[1][3] = yPos;
animationValues[1][4] = 0;
animationValues[1][5] = 0;
animationValues[1][6] = 0;
animationValues[1][7] = 0;
然后在ClippingImageView.java
public void setAnimationProgress(float progress) {
animationProgress = progress;
setScaleX(animationValues[0][0] + (animationValues[1][0] - animationValues[0][0]) * animationProgress);
setScaleY(animationValues[0][1] + (animationValues[1][1] - animationValues[0][1]) * animationProgress);
setTranslationX(animationValues[0][2] + (animationValues[1][2] - animationValues[0][2]) * animationProgress);
setTranslationY(animationValues[0][3] + (animationValues[1][3] - animationValues[0][3]) * animationProgress);
setClipHorizontal((int) (animationValues[0][4] + (animationValues[1][4] - animationValues[0][4]) * animationProgress));
setClipTop((int) (animationValues[0][5] + (animationValues[1][5] - animationValues[0][5]) * animationProgress));
setClipBottom((int) (animationValues[0][6] + (animationValues[1][6] - animationValues[0][6]) * animationProgress));
setRadius((int) (animationValues[0][7] + (animationValues[1][7] - animationValues[0][7]) * animationProgress));
invalidate();
}
我还注意到,当我记录animatingImageView.getMeasuredWidth()
和animatingImageView.getMeasuredHeight()
时,他们都给了我0.这只是一个用于动画目的的虚拟视图吗?