2012-10-10 45 views
6

Tôi hoàn toàn bối rối về điều gì đó mà tôi nghĩ sẽ là điều đơn giản nhất từ ​​trước tới nay. Tôi đang cố gắng phát video bên trong một khung trong bố cục tương đối. Lưu ý rằng ứng dụng có nghĩa là chạy trên một thiết bị rất cụ thể (tab internet Archos 101) ở chế độ nằm ngang và video được mã hóa trước với kích thước rất cụ thể là 480x360, đó là lý do bố cục có một số cố định kích cỡ.Phát video trên một phần của màn hình

Dưới đây là cách bố trí

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" > 

<!-- Background --> 
<ImageView 
    android:layout_width="980dp" 
    android:layout_height="568dp" 
    android:src="@drawable/bg_video" /> 

<TextView 
    android:id="@+id/video_headtext" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="73dp" 
    android:layout_marginLeft="255dp" 
    android:textColor="#FFFFFF" 
    android:textSize="16dp" /> 

<TextView 
    android:id="@+id/video_title" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:textColor="#FFFFFF" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="112dp" /> 

<VideoView 
    android:id="@+id/video_videocontainer" 
    android:layout_width="480dp" 
    android:layout_height="360dp" 
    android:layout_below="@id/video_title" 
    android:layout_marginTop="10dp" 
    android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

tôi tải các video sử dụng mã này

player = (VideoPlayer) findViewById(R.id.video_videocontainer); 
player.setVideoURI(videoUri); 

Mã này hoạt động, nhưng trong khi videoView là chính xác bên trong khung hình, video tự đóng ở đâu đó trong đầu màn hình và chỉ một phần của màn hình được hiển thị trong VideoView.

Ví dụ về những gì xảy ra here (Đây chỉ là video tạm thời để gỡ lỗi). Ảnh chụp màn hình của video tại cùng một thời điểm here.

Như bạn thấy, VideoView chỉ hiển thị một phần của video, điền phần còn lại bằng màu đen.

Tôi khá chắc chắn rằng tôi thiếu một cái gì đó thực sự đơn giản, nhưng tôi không thể tìm ra những gì cả.

Xin cảm ơn trước.

EDIT: Tôi đã thử viết một lớp VideoPlayer kéo dài VideoView và ghi đè onMeasure như thế này

@Override 
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{ 
    setMeasuredDimension(480, 360); 
} 

public void changeVideoSize() 
{ 
    getHolder().setFixedSize(480, 360); 

    requestLayout(); 
    invalidate(); 
} 

Nhưng nó không giúp một chút duy nhất.

CHỈNH SỬA 2: Đã thử với SurfaceView và MediaPlayer, cùng một kết quả. Tôi có cảm giác mình chưa hiểu nguyên tắc chơi video trên Android. Bắt khá khó khăn ở đây.

EDIT 3: Tôi đã thử trên Samsung Galaxy HD và video hiển thị chính xác bên trong khung. Tôi tự hỏi liệu đây có phải là vấn đề với máy tính bảng hay không?

CHỈNH SỬA 4: AVD chạy dưới 2,2 không hiển thị video đúng cách. AVD chạy 4.1. Tôi đoán rằng nó thu hẹp một chút.

Trả lời

3

Tôi đã gặp sự cố tương tự với video có cấu hình quá cao cho thiết bị cụ thể đó (2.1) để được xử lý và nó hoạt động tốt cho android 4.0.

Ngoài ra, tôi đang sử dụng SurfaceView và mẹo là thêm người nghe vào các sự kiện cho MediaPlayer (setOnVideoSizeChangedListener nói riêng) và gọi lại đến bề mặt được liên kết với các sự kiện mediaplayer.

+0

Tôi đã viết lại với một SurfaceView và bây giờ tôi đang phải đối mặt với một cái gì đó thực sự kỳ lạ. Video phát bên ngoài SurfaceView, giống như với VideoView. Chỉ có nó không bị cắt, và hiển thị trên đầu trang của tất cả mọi thứ. Ngay cả khi tôi sử dụng 'setDisplay (null)', video vẫn hiển thị! –

+0

có u thực hiện gọi lại chủ sở hữu bề mặt và liên kết các sự kiện cho nó? – petrumo

+0

Tôi đã quản lý để video có vị trí tốt hơn một chút sau khi theo dõi khách hàng tiềm năng của bạn. Nó không phải là tối ưu và tôi vẫn không thể tin rằng nó là khó khăn như vậy để vị trí một video bên trong một cái nhìn, nhưng nó hoạt động cho bây giờ. Cảm ơn! –

0

Đặt thuộc tính VideoView setZOrderOnTop thành true và xem nó có hoạt động hay không. Ví dụ nếu tôi có một videoview gọi qvideo mọi thứ

qvideo.setZOrderOnTop(true); 
+0

Thật không may là không thay đổi bất cứ điều gì. –

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