2011-09-21 18 views
10

Mam aplikację na Androida, która może odtwarzać audio/wideo i wyświetlać zdjęcia. W przypadku filmów chcę nakładać przycisk odtwarzania na obrazie podglądu, a także na widokach listy .. W tej chwili robię to z ImageView w formacie xml, a następnie losowanie to lista warstw warstw, która Definiuję programowo, ponieważ jedno z obrazów jest dynamiczne, oczywiście przycisk odtwarzania jest statyczny. Chcę ustawić przycisk odtwarzania 10px od dołu i wyśrodkować w poziomie.Android - Najlepszy sposób na nałożenie przycisku odtwarzania na obrazie/miniaturze

My ImageView definiuje się następująco (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 jest częścią formy, w którym użytkownik może edycję tytułu i inne informacje. Wtedy w mojej aktywności teraz tworzę listę warstw takiego:

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); 

działa to tylko wtedy, gdy orientacja obrazu jest pozioma. Należy pamiętać, że obraz/miniatura to MINI_KIND, co oznacza, że ​​ma być 512 x 384, ale widzę, że w rzeczywistości nie jest to rozmiar. Na moim telefonie mają rozmiar 480 x 800 lub 800 x 480 w zależności od orientacji kamera była w .. Ponieważ moja szerokość/wysokość jest wcześniej zdefiniowana, chcę tylko, aby warstwa przycisku odtwarzania nie skalała się w ogóle i dopasować ją w ten sam sposób za każdym razem ..

Innym oczywistym sposobem na zrobienie tego czy użyłbym względnego układu (czy może układu ramek?), ale miałem nadzieję, że tego uniknę, ponieważ używam tego samego kodu do wyświetlania zarówno zdjęć, jak i filmów (z których oba mają podgląd miniatury obrazu - ale tylko filmy powinien mieć przycisk odtwarzania na nich).

Każdy pomysł, jak wyrównać warstwy z listą warstw lub alternatywami, które działałyby równie dobrze lub lepiej?

Odpowiedz

18

skończyło się używając FrameLayout tak:

<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> 

Potem wystarczy ustawić widoczność View.VISIBLE przycisku odtwarzania filmów i podglądu na lewo to poszedł do zdjęć. W widoku listy użyłem powyższej metody listy warstw, ponieważ wszystkie miniatury mają ten sam wymiar. Mam nadzieję, że to pomoże komuś innemu!

Zauważ, że layout_gravity na ImageView z id VideoPreviewPlayButton umieszcza go na dole wyśrodkowany w poziomie, a paddingBdp 10dp przesuwa go nieco w górę od dołu.

+0

Zrobiłem to, ale nie mogłem uzyskać kliknięć, aby zarejestrować się już w widoku siatki – CQM

2

Należy rozważyć użycie RelativeLayout jako pojemnika dla widoków. Daje swobodę umieszczania widoków dzieci. Możesz powiązać swój przycisk z prawą lub górną krawędzią obrazu.

Powiązane problemy