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.
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ị! –
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
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! –