0

任意の点を中心に回転する画像があります。しかし、同時に回転するには3つのそのような画像が必要です。これは、同じものを実装しようとする方法です

private void rotateLogo(float degrees){
    Matrix matrix1 = new Matrix();
    //int radius = turntable.getWidth()/2;
    double radians = degrees* (Math.PI/180);
    double xcoordinate = 220 * Math.cos(radians)- 60;
    double ycoordinate = 220 * Math.sin(radians) + 50;
    matrix1.postRotate((int)radians, 220, 220);

    // people image
    FrameLayout.LayoutParams linLay  = (FrameLayout.LayoutParams) peopleLogo.getLayoutParams();
    linLay.bottomMargin = (int)ycoordinate + 10;
    linLay.rightMargin = (int)xcoordinate + 10;
    peopleLogo.setImageMatrix(matrix1);
    peopleLogo.setLayoutParams(linLay); 
    rotateLogo2(degrees - 2);
    }

private void rotateLogo2(float degrees){
    double radians = degrees* (Math.PI/180);
    double xcoordinate = 220 * Math.cos(radians)- 60;
    double ycoordinate = 220 * Math.sin(radians) + 50;

    // people image
    FrameLayout.LayoutParams linLay  = (FrameLayout.LayoutParams) serverLogo.getLayoutParams();
    linLay.bottomMargin = (int)ycoordinate + 10;
    linLay.rightMargin = (int)xcoordinate + 10;
    serverLogo.setLayoutParams(linLay);
}  

上記のコードでは、同じコードを使用して角度を小さくし、2 番目の画像を回転させましたが、画像は回転せず、タッチすると消えてしまいます。

また、回転する前に最初の画像のレイアウト パラメータを取得して、2 番目の画像に同じものを適用しようとしましたが、これも機能しません。

画像は回転すると消えますが、表示されてから消えることもあります

私が間違っている可能性がある場所について誰かが私を助けることができますか、同じことに対する他のアプローチを提案できますか?

4

1 に答える 1

0

コードをリファクタリングできます

private void rotateLogo(View logo, float degrees){
   Matrix matrix1 = new Matrix();
    //int radius = turntable.getWidth()/2;
    double radians = degrees* (Math.PI/180);
    double xcoordinate = 220 * Math.cos(radians)- 60;
    double ycoordinate = 220 * Math.sin(radians) + 50;
    matrix1.postRotate((int)radians, 220, 220);

    // people image
    FrameLayout.LayoutParams linLay  = (FrameLayout.LayoutParams) logo.getLayoutParams();
    linLay.bottomMargin = (int)ycoordinate + 10;
    linLay.rightMargin = (int)xcoordinate + 10;
    if (logo isInstanceOf ImageView) { 
        logo.setImageMatrix(matrix1);
    }
    logo.setLayoutParams(linLay); 
}

異なるパラメータを使用してメソッドを2回呼び出します。

rotateLogo(peopleLogo, degrees);
rotateLogo(serverLogo, degrees-2);
于 2012-06-26T06:43:33.923 に答える