2011-09-21 39 views
10

Tôi có một ứng dụng Android có thể phát lại âm thanh/video và hiển thị hình ảnh. Đối với video, tôi muốn phủ một nút phát ở đầu hình ảnh xem trước và cũng trong chế độ xem danh sách. Hiện tại, cách tôi đang thực hiện với ImageView trong xml, và sau đó có thể vẽ được là một danh sách lớp lớp Tôi định nghĩa theo chương trình vì một trong những hình ảnh là động, nút phát là tĩnh tất nhiên. Tôi muốn căn chỉnh nút phát 10px từ dưới cùng và căn giữa theo chiều ngang.Android - Cách tốt nhất để che phủ một nút phát trên hình ảnh/hình thu nhỏ

ImageView My được định nghĩa như thế này (trong 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"/> 

Các ImageView là một phần của một hình thức mà người dùng có thể chỉnh sửa tiêu đề và thông tin khác. Sau đó, trong hoạt động của tôi bây giờ tôi có thể tạo danh sách lớp như thế này:

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

này chỉ hoạt động khi định hướng của hình ảnh là ngang. Hãy nhớ rằng hình ảnh/hình thu nhỏ là MINI_KIND có nghĩa là nó phải là 512 x 384 nhưng tôi thấy rằng nó thực sự không phải là kích thước .. Trên điện thoại của tôi, chúng là 480x800 hoặc 800x480 tùy theo hướng máy ảnh đang ở .. Vì chiều rộng/chiều cao bố cục của tôi được xác định trước tôi chỉ muốn một cách để giữ cho lớp nút phát không bị co giãn và sắp xếp theo cùng một cách mọi lúc ..

Cách rõ ràng khác để thực hiện việc này Tôi có thể sử dụng cùng một mã để hiển thị cả hình ảnh và video (cả hai đều có hình xem trước hình thu nhỏ - nhưng chỉ có video nên có nút phát trên chúng).

Bất kỳ ý tưởng nào về cách căn chỉnh các lớp bằng danh sách lớp hoặc các lựa chọn thay thế sẽ hoạt động tốt hoặc tốt hơn?

Trả lời

18

tôi đã kết thúc bằng một FrameLayout như thế này:

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

Sau đó, tôi chỉ cần thiết lập khả năng hiển thị để View.VISIBLE vào nút play preview cho video và trái nó đi cho ảnh. Đối với chế độ xem danh sách của tôi, tôi đã sử dụng phương thức liệt kê lớp được hiển thị ở trên vì tất cả hình thu nhỏ có cùng kích thước. Hy vọng điều này sẽ giúp người khác!

lưu ý rằng layout_gravity trên ImageView với id VideoPreviewPlayButton đặt nó ở dưới cùng được căn giữa theo chiều ngang và paddingBottom 10dp di chuyển nó lên một chút từ dưới cùng.

+0

Tôi đã làm điều này nhưng tôi không thể nhận được các nhấp chuột để đăng ký nữa trong GridView của tôi – CQM

2

Cân nhắc sử dụng RelativeLayout làm vùng chứa cho chế độ xem của bạn. Nó cho phép bạn tự do đặt quan điểm của trẻ. Bạn có thể liên kết nút của mình ở cạnh phải hoặc cạnh trên của lần xem hình ảnh của bạn.

Các vấn đề liên quan