2012-01-07 6 views
1

Je crée un jeu de plateau de tuiles. Je souhaite faire pivoter une pièce de mosaïque bitmap de quelques degrés prédéfinis.
Lorsque je fais pivoter mon bitmap, la taille change.
Par exemple, si je veux un morceau de carreau triangle 75x75, en rotation, je récupère un 68x68 de ce code. Comment puis-je garder les choses de la même taille pour que tout reste de la taille de la planche?Rotation bitmap et maintenir la taille

Voici ce que j'utilise pour faire tourner:

public class RotatebitmapActivity extends Activity { 
@Override 
public void onCreate(Bundle icicle) { 
    super.onCreate(icicle); 
    LinearLayout linLayout = new LinearLayout(this); 

    // load the origial BitMap (500 x 500 px) 
    Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
      R.drawable.t123); 

    int width = bitmapOrg.getWidth(); 
    int height = bitmapOrg.getHeight(); 
    int newWidth = 75; 
    int newHeight = 75; 

    // calculate the scale - in this case = 0.4f 
    float scaleWidth = ((float) newWidth)/width; 
    float scaleHeight = ((float) newHeight)/height; 

    // createa matrix for the manipulation 
    Matrix matrix = new Matrix(); 
    // resize the bit map 
    matrix.postScale(scaleWidth, scaleHeight); 
    // rotate the Bitmap 
    matrix.postRotate(120); 

    // recreate the new Bitmap 
    Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
         width, height, matrix, true); 


    // make a Drawable from Bitmap to allow to set the BitMap 
    // to the ImageView, ImageButton or what ever 
    BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); 

    ImageView imageView = new ImageView(this); 

    // set the Drawable on the ImageView 
    imageView.setImageDrawable(bmd); 

    // center the Image 
    imageView.setScaleType(ScaleType.CENTER); 

    // add ImageView to the Layout 
    linLayout.addView(imageView, 
     new LinearLayout.LayoutParams(
        LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT 
      ) 
    ); 

    // set LinearLayout as ContentView 
    setContentView(linLayout); 
} 
+0

Vérifiez ma réponse [ici] [1], workd sans problème [1]: http://stackoverflow.com/questions/8712652/rotating-image-on-a-canvas-in -android/28293393 # 28293393 – MSaudi

Répondre

1

Qu'est-ce qui se passe dans votre code, est que le bitmap créé est la bonne taille. Cependant, tous les bitmaps sont automatiquement mis à l'échelle pour correspondre à la densité de l'écran actuellement utilisé.

Il y a deux façons (que je connais) d'obtenir le résultat que vous désirez.

  1. Vous pouvez définir la densité d'un bitmap après l'avoir créé et avant de l'encapsuler dans un dessin. Pour ce faire, ajoutez un code similaire à:

    resizedBitmap.setDensity (DisplayMetric.DENSITY_HIGH);

    Ce code définit la densité pour laquelle l'image bitmap est conçue et peut empêcher Android de mettre à l'échelle automatiquement l'image.

  2. La deuxième solution est plus d'une méthodologie qu'une solution spécifique à ce problème particulier. Je ne vais pas entrer dans les détails, pour que voir Supporting Multiple Screens | Android Developers

Espérons que quelqu'un va se passer le long qui peut répondre à votre question mieux que je peux.

+0

N'a pas fait un peu de différence. L'imageView est toujours 68x68 indépendamment de SetMinimums utilisé ou non. FIT_XY échelonne simplement l'image entière en plein écran – Martin

+0

cela n'a rien à voir avec l'ImageView - c'est le BitMap. Lorsque le Bitmap est redimensionné et pivoté, la taille n'est pas correcte. L'utilisation de wrap-content sur ImageView échoue uniquement à sa taille actuelle (incorrecte). – Martin

+0

Par exemple, si j'ai un bitmap 150x150, je veux qu'il soit réduit à 75x75 et pivoté, dans le code ci-dessus, resizedBitmap sort de createBitmap à 102x102. Ensuite, le nouveau BitmapDrawable, bmd, est créé à partir de cela et il est 68x68. Je ne peux pas comprendre comment faire pivoter un objet et garder les carreaux de la même taille – Martin

Questions connexes