Android - Лучший способ наложить кнопку воспроизведения на изображение/эскиз

У меня есть приложение андроид, которое может воспроизводить аудио/видео и показывать фотографии. Для видео я хочу наложить кнопку воспроизведения поверх изображения предварительного просмотра, а также в окнах просмотра списков... Прямо сейчас, как я делаю это с ImageView в xml, а затем рисунок является список слоев, которые я определяю программно, потому что одно из изображений является динамическим, кнопка воспроизведения является статическим, конечно. Я хочу выровнять кнопку воспроизведения 10px снизу и центрировать по горизонтали.

My 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 в зависимости от ориентации, в которой была камера... Так как моя компоновка ширина/высота предварительно определена, я просто хочу, чтобы слой кнопки воспроизведения вообще не масштабировался и каждый раз выравнивался одним и тем же способом...

Другой очевидный способ сделать это - использовать относительную разметку (или, возможно, рамную разметку?), но я надеялся избежать этого, так как я использую один и тот же код для отображения как изображений, так и видео (в обоих случаях есть предварительный просмотр миниатюр - но только в видео должна быть кнопка воспроизведения).

Есть идеи, как выровнять слои по списку слоев, или альтернативы, которые будут работать так же хорошо или лучше?

10
задан Matt Wolfe 21 September 2011 в 18:13
поделиться