Android - Meilleure façon de superposer un bouton de lecture sur une image / miniature
J'ai une application android qui peut de lecture audio/vidéo et de montrer des images.
Pour les vidéos que je veux à la superposition d'un bouton de lecture sur le dessus de l'aperçu de l'image et aussi dans les vues de liste..
Maintenant comment je fais c'est avec une ImageView en xml, puis le drawable est une couche de la couche de liste-qui-je définir par programmation, car l'une des images est dynamique, le bouton jouer est statique, bien sûr. Je veux aligner le bouton de lecture 10px à partir du bas, et centré horizontalement.
Mon ImageView est définie comme ceci (en xml)
<ImageView
android:id="@+id/EvidencePreview"
android:layout_width="267dp"
android:layout_height="201dp"
android:scaleType="centerCrop"
android:layout_margin="3dp"
android:layout_gravity="center_horizontal|center_vertical"/>
L'ImageView est partie d'un formulaire où l'utilisateur peut modifier le titre et d'autres informations.
Ensuite dans mon activité maintenant, je créer la liste des calques comme ceci:
Resources resources = mContext.getResources();
Drawable playOverlayDrawable = resources.getDrawable(R.drawable.play_overlay_large);
Drawable[] layers = new Drawable[2];
layers[0] = Drawable.createFromPath(tb.filePath);
layers[1] = playOverlayDrawable;
LayerDrawable layerDrawable = new LayerDrawable(layers);
ViewGroup.LayoutParams lp = iv.getLayoutParams();
int imageHeight = lp.height;
int imageWidth = lp.width;
int overlayHeight = layers[1].getIntrinsicHeight();
int overlayWidth = layers[1].getIntrinsicWidth();
int lR = (imageWidth - overlayWidth) / 2;
int top = imageHeight - (overlayHeight + 10);
int bottom = 10;
layerDrawable.setLayerInset(1, lR, top, lR, bottom);
iv.setImageDrawable(layerDrawable);
Cela ne fonctionne que lorsque l'orientation de l'image est à l'horizontale.
Gardez à l'esprit que l'image/vignette est la MINI_KIND ce qui signifie que ses censé être de 512 x 384 mais je vois qu'il n'est pas vraiment la taille.. Sur mon téléphone, ils sont soit 480x800 ou de 800x480 en fonction de l'orientation de l'appareil photo..
Depuis ma mise en page largeur/hauteur est pré-définies, je veux juste un moyen de garder le bouton de lecture de la couche de mise à l'échelle et de l'aligner la même façon à chaque fois..
L'autre de manière évidente à faire, ce serait relatif à la mise en page (ou peut-être un cadre de mise en page?) mais j'espérais pour éviter que depuis que j'utilise le même code pour afficher à la fois des images et des vidéos (qui ont tous deux une image miniature d'aperçu, mais seulement les vidéos doivent avoir le bouton de lecture sur eux).
Aucune idée de comment aligner les couches avec une couche de liste, ou des solutions de rechange qui pourrait fonctionner tout aussi bien ou mieux?
source d'informationauteur Matt Wolfe
Vous devez vous connecter pour publier un commentaire.
J'ai fini à l'aide d'un FrameLayout comme ceci:
Alors j'ai juste mis de la visibilité à Vue.VISIBLE à l'aperçu bouton de lecture pour les vidéos et à gauche, elle a disparu pour les photos.
Pour ma liste vue, j'ai utilisé de la liste des calques méthode indiquée ci-dessus, parce que toutes les vignettes ont la même dimension. Espérons que cela aide quelqu'un d'autre!
avis que le layout_gravity sur l'ImageView avec l'id VideoPreviewPlayButton le met en bas centré horizontalement, et la 10dp paddingBottom se déplace un peu à partir du bas.
Envisager d'utiliser RelativeLayout comme conteneur pour vos points de vue. Il vous donne la liberté de placer l'enfant vues. Vous pouvez lier votre bouton vers la droite ou du haut de votre imageview.