2014-06-12 4 views
1

Dans Android, j'essaie de superposer deux images (dans ce cas, des objets Bitmap) dans un FrameLayout. Une image est placée en haut, l'autre image étant insérée au-dessous au premier pixel transparent de cette image.Android - Insérer une image dans les pixels transparents d'un autre

Actuellement, je tente le suivant à l'aide Bitmap.getPixel() pour localiser le pixel transparent:

for (int i = 0; i < image_count; i++) 
{ 
    //load page from internal memory 
    topImages[i] = getImage("p"+i+".png"); 
    for (int x = 0; x < topImages[i].getWidth(); x++) 
    { 
     for (int y = 0; y < topImages[i].getHeight(); y++) 
     { 
      if (topImages[i].getPixel(x, y) == Color.TRANSPARENT) 
      { 
       bottomX[i] = x; 
       bottomY[i] = y; 
       break; 
      } 
     } 
    } 
} 

-je ajouter ensuite les images à une mise en page d'images, en utilisant deux ImageViews, et utiliser ces valeurs pour positionner l'image inférieure :

bottomView.setTranslationX(bottomX[position]); 
bottomView.setTranslationY(bottomY[position]); 

Cependant, la mise en place de l'image de fond est toujours inexact, généralement par une marge vers le bas et à droite qui est différent (mais toujours le même) pour chaque image donnée. J'ai également essayé setX() et setY(), ainsi que d'utiliser des paramètres pour définir les valeurs TOP et LEFT de manière similaire, avec les mêmes résultats). Que puis-je faire pour que le placement soit toujours cohérent, avec le de l'image à (ou proche) du premier pixel transparent?

Répondre

0

Si vous souhaitez afficher uniquement les images, vous pouvez les ajouter en tant que cadres différents dans FrameLayout. Dans votre fichier XML, déclarez d'abord celui que vous voulez montrer comme pixels transparents, puis déclarez celui qui aura des pixels transparents.

+0

Voulez-vous dire que le FrameLayout a un moyen de positionner automatiquement mon image dans la zone transparente? Pour clarifier, ils sont déjà en couches; ce dont j'ai besoin, c'est de pouvoir centrer l'image dans la zone transparente. Editer: J'ai aussi besoin de le faire automatiquement, avec des ensembles d'images provenant d'un serveur, donc je ne peux pas configurer manuellement chaque mise en page. – user3732383

+0

@ user3732383 Comme les images ont une zone transparente, elles seront au format png. Si vous les placez dans une vue d'image, elle affichera la zone derrière l'image par l'intermédiaire de zones transparentes. Ainsi, vous pouvez prendre différentes images dans un cadre et les empiler. Si le nombre d'images est dynamique, vous pouvez gonfler dynamiquement ImageViews dans la mise en page. – berserk

+0

Oh! Oui. Je suis déjà capable de placer correctement une image l'une sur l'autre. Cette partie fonctionne bien. Ce que j'essaie de faire, c'est que la position horizontale et verticale (x et y) de l'image du bas s'aligne automatiquement sur le premier pixel transparent de l'image supérieure choisie. Le résultat serait que le coin en haut à gauche de l'image du bas va où la zone transparente de l'image supérieure commence. – user3732383

Questions connexes