将动画从x,y缩放到居中的全屏幕

时间:2016-07-03 20:30:27

标签: android scaleanimation

我试图从(x,y)位置拍摄我的小图像,然后将其缩放到全屏(按屏幕宽度)并将其移动到中心。

这是我的使命的视觉动机: enter image description here

我已经设法计算缩放比例以将图像放大到全屏,但是我正在努力计算枢轴点以使其到达正好的中心。

为了缓解这个问题我假设X现在已经居中了......在我理解了Y之后,我只是将相同的公式复制到X属性。

所以我试图绘制几何图形以便得出这样的通用公式,这就是我所得到的: enter image description here

这里是根据公式编写的代码:

public static ScaleAnimation scale2fitAnimation(final View item2Scale, long duration) {

    Context context = item2Scale.getContext();

    int screenW = getScreenW(context);
    int screenH = getScreenH(context);

    int myW = item2Scale.getWidth();
    int myH = item2Scale.getHeight();

    int distanceFromTop = item2Scale.getBottom() - myH / 2;

    int dY_belowCenter = distanceFromTop - screenH / 2;

    float scaleX = (float) screenW / myW;
    float pivotY = 0.5f + (float) dY_belowCenter / (screenH / 2);

    ScaleAnimation scaleAnimation = new ScaleAnimation(
            1f, scaleX, //fromXscale -> toXscale
            1f, scaleX, //fromYscale -> toYscale
            Animation.RELATIVE_TO_SELF, 0.5f, //pivotX
            Animation.RELATIVE_TO_SELF, pivotY //pivotY
    );

    scaleAnimation.setFillAfter(true);
    scaleAnimation.setDuration(duration);

    //restore default shape later on..
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            item2Scale.clearAnimation();
        }
    }, 2000);


    return scaleAnimation;
}

public static int getScreenW(Context context) {
    return context.getResources().getDisplayMetrics().widthPixels;
}

public static int getScreenH(Context context) {
    return context.getResources().getDisplayMetrics().heightPixels;
}

当然称之为:

imageView.startAnimation(scale2fitAnimation(imageView,500));

结果如何不好......我可以很容易地看到我的眼睛中的图像并没有一直到达中心..

我无法弄清楚我的公式中有什么错误,我一遍又一遍地重写它,我找不到任何数学或代码错误。

任何人都可以请我指导我完成这项工作,或者向我展示一种更简单的方法..

先谢谢你们!

P.S:我只使用方形图像..

0 个答案:

没有答案