Android锚点ImageView左侧和顶部位于(0,0)

时间:2016-12-05 09:10:59

标签: android user-interface

我想在我的应用程序中实现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.这只是一个用于动画目的的虚拟视图吗?

0 个答案:

没有答案