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