2012-05-17 25 views
15

Tôi hiện đang cố gắng triển khai một videoview sẽ hiển thị video ở một vị trí cụ thể. Tôi có thể hiển thị video toàn màn hình mà không gặp vấn đề gì. Tuy nhiên, bất cứ khi nào tôi cố gắng hiển thị video đó bên trong một khung hình (ví dụ như một hình chữ nhật nhỏ), tôi chỉ có thể hiển thị một phần của video trong chế độ xem đó. Tôi không thể phù hợp với video vào quan điểm đó.Tôi làm cách nào để xem video bên trong một videoview tại một số vị trí cụ thể?

Tôi đã tìm kiếm rất nhiều liên kết về chia tỷ lệ video trong android, tuy nhiên tôi không thể tìm thấy bất kỳ cách nào để thực hiện việc này. Mọi trợ giúp về vấn đề đó sẽ hữu ích.

Những gì tôi đang sử dụng là tôi có 2 lớp khác nhau. Một trong số đó là lớp hoạt động video của tôi và người kia là một lớp helper:

public class VideoViewCustom extends VideoView { 
    private int mForceHeight = 0; 
    private int mForceWidth = 0; 
    public VideoViewCustom(Context context) { 
     super(context); 
    }  
    public VideoViewCustom(Context context, AttributeSet attrs) { 
     this(context, attrs, 0); 
    } 

    public VideoViewCustom(Context context, AttributeSet attrs, int defStyle) { 
     super(context, attrs, defStyle); 
    } 

    public void setDimensions(int w, int h) { 
     this.mForceHeight = h; 
     this.mForceWidth = w; 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     super.onMeasure(widthMeasureSpec, heightMeasureSpec); 
     setMeasuredDimension(mForceWidth, mForceHeight); 
    } 
} 

lớp đó giúp tôi để thiết lập kích thước của videoview một cách chính xác, tuy nhiên tôi couldnt làm cho phù hợp với video vào khu vực đó. Ý tôi là tôi không thể mở rộng video để vừa với khu vực đó. Tôi không biết có hay không android đang tự động tính toán vào các kích thước nhất định nhưng tôi không thể làm điều đó.

+0

http://stackoverflow.com/questions/4434027/android-videoview-orientation-change-with-buffered-video Liên kết này có thể hữu ích cho bạn –

+0

Tôi đã đi qua nó, nhưng nó làm cho không có sự khác biệt. Dunno tại sao khó khăn – denizt

+2

Tôi cũng đã khắc phục sự cố này khi chuyển ứng dụng của tôi sang ICS. Trong ICS nó hoạt động mà không có vấn đề gì. Tuy nhiên khi tôi cố gắng làm điều đó với Froyo, tôi đã gặp rất nhiều vấn đề. Tôi sẽ đi qua họ nếu ai đó cũng phải đối mặt với họ. – denizt

Trả lời

2

Có thể điều này sẽ giúp bạn ...

public void onMeasure(int width, int height) 
{ 
    getHolder().setFixedSize(width, height); 
    forceLayout(); 
      setMeasuredDimension(width, height); 
    invalidate(); 
} 

... và thử một RelativeLayout

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

    <VideoView 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:layout_alignParentTop="true" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentLeft="true"/> 

</RelativeLayout> 
1

Tôi nghĩ rằng bạn phải tạo một ViewGroup nơi bạn có thể thực hiện onLayout() phương pháp.

Tại đây, bạn có thể đặt vị trí của các chế độ xem trực tiếp gọi phương thức layout() cho mỗi một trong số chúng.

Ví dụ:

ViewGroup vg = new ViewGroup(this) { 

    @Override 
    protected void onLayout(boolean changed, int l, int t, int r, int b) { 
      int x = getMeasuredWidth(); 
      int y = getMeasuredHeight(); 
      for (int i = 0; i < vg.getChildCount(); i++) { 
       if(vg.getChildAt(i) instanceof TextView){ 
        vg.getChildAt(i).layout(...);//and so on... 

       } 
      } 
     } 
}; 

Hope giúp !!

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