我有一个Android应用程序,可以播放音频/视频和显示图片。 对于视频,我想在预览图像的顶部以及列表视图中叠加播放按钮。 现在我正在做的是使用xml中的ImageView,然后drawable是一个图层层列表,我以编程方式定义,因为其中一个图像是动态的,播放按钮当然是静态的。我想从底部对齐播放按钮10px,并水平居中。
我的ImageView定义如下(在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"/>
ImageView是表单的一部分,用户可以在其中编辑标题和其他信息。 然后在我的活动中,我创建了这样的图层列表:
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);
仅当图像的方向为水平时才有效。 请记住,图像/缩略图是MINI_KIND,这意味着它应该是512 x 384,但我发现它实际上不是大小..在我的手机上,它们是480x800或800x480,具体取决于相机的方向在...... 由于我的布局宽度/高度是预先定义的,我只想要一种方法来保持播放按钮层不受缩放,并且每次都以相同的方式对齐它。
另一个显而易见的方法是使用相对布局(或者可能是框架布局?)但我希望避免这种情况,因为我使用相同的代码来显示图像和视频(两者都是有图像缩略图预览 - 但只有视频应该有播放按钮。
任何想法如何将图层与图层列表对齐,或者哪些选项可以更好或更好地工作?
答案 0 :(得分:20)
我最终使用了这样的FrameLayout:
<FrameLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="3dp"
android:layout_gravity="center_horizontal|center_vertical" >
<ImageView
android:id="@+id/MediaPreview"
android:layout_width="267dp"
android:layout_height="201dp"
android:scaleType="centerCrop"
android:src="@drawable/loading" />
<ImageView
android:id="@+id/VideoPreviewPlayButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="10dp"
android:layout_gravity="center_horizontal|bottom"
android:visibility="gone"
android:src="@drawable/play_overlay_large" />
</FrameLayout>
然后我只是将View.VISIBLE的可见性设置为视频的预览播放按钮,然后将其留给照片。 对于我的列表视图,我使用了上面显示的图层列表方法,因为所有缩略图都是相同的尺寸。希望这有助于其他人!
注意带有id VideoPreviewPlayButton的ImageView上的layout_gravity将它放在底部水平居中,而10dp paddingBottom将它从底部稍微向上移动。
答案 1 :(得分:2)
考虑使用RelativeLayout作为视图的容器。它让您可以自由地放置儿童视图。您可以将按钮绑定到图像视图的右边缘或上边缘。