2010-05-09 7 views
0

Je souhaite afficher une flèche indiquant la direction d'un objectif, en utilisant le capteur d'orientation et la position GPS actuelle. Tout fonctionne bien, sauf que je veux faire pivoter l'image de la flèche dans mon ImageView.Rotation de l'image dans ImageView

Le code actuel, qui montre la flèche vers le haut, est celle-ci:

ImageViewArrow.setImageResource(R.drawable.arrow); 

Quelle est la meilleure solution pour montrer la flèche, rotation par N degrés?

J'ai essayé, mais l'ai donnée foiré graphiques:

Matrix matrix = new Matrix(); 
matrix.postRotate(Rotation); 
Bitmap bitmapOrg = BitmapFactory.decodeResource(getResources(), 
    R.drawable.arrow); 
Bitmap resizedBitmap = Bitmap.createBitmap(bitmapOrg, 0, 0, 
    bitmapOrg.getWidth(),bitmapOrg.getHeight(), matrix, true); 
BitmapDrawable bmd = new BitmapDrawable(resizedBitmap); 
InfoArrow.setScaleType(ScaleType.CENTER); 
InfoArrow.setImageDrawable(bmd); 

Répondre

1
+0

J'ai essayé cela avant de poster la question, mais j'ai obtenu des résultats erronés. Cependant, c'est en fait la solution - je juste ai dû enlever la ligne InfoArrow.setScaleType (ScaleType.CENTER) ;, alors il semble juste. –

+0

C'est terriblement inefficace pour quelque chose qui est continuellement mis à jour. Pour ce genre de chose, vous devriez vraiment écrire une vue personnalisée qui dessine ce que vous voulez. Il n'est pas nécessaire d'abuser d'une classe standard comme ImageView comme ceci; écrire une vue personnalisée qui dessine un bitmap (et applique une rotation avant de le faire) est assez simple. – hackbod

0

Il y a un paramètre de matrice dans la méthode CreateBitmap qui peut être utilisé pour redimensionner et faire pivoter l'image. Vous pouvez essayer quelque chose comme le suivant:

Matrix matrix = new Matrix(); 
    // to rotate the image bitmap use post Rotate 
    matrix.postRotate(45); 


    Bitmap rotatedImage = Bitmap.createBitmap(bitmapOrg, 0, 0, 
         width, height, matrix, true); `