2

我正在尝试从(x,y)位置获取我的小图像,并将其放大到全屏(按屏幕宽度)并将其移动到中心。

这是我的任务的视觉动机: 在此处输入图像描述

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

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

因此,我尝试绘制几何插图以提出这样的通用公式,这就是我所得到的: 在此处输入图像描述

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

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));

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

我找不到我的公式有什么问题,我一遍又一遍地重写它,我找不到任何数学或代码错误..

任何人都可以在这里指导我来完成这个任务,或者告诉我一个更简单的方法..

提前感谢!

PS:我只处理方形图像..

4

0 回答 0