2012-05-17 15 views
15

मैं वर्तमान में एक वीडियोव्यू लागू करने की कोशिश कर रहा हूं जो एक विशिष्ट स्थिति पर एक वीडियो दिखाएगा। मैं बिना किसी समस्या के एक पूर्णस्क्रीन वीडियो दिखा सकता हूं। हालांकि जब भी मैं उस वीडियो को एक फ्रेम के अंदर दिखाने की कोशिश करता हूं (उदाहरण के लिए थोड़ा आयत) मैं केवल उस दृश्य में वीडियो का एक हिस्सा दिखा सकता हूं। मैं उस दृश्य में वीडियो फिट नहीं कर सका।मैं किसी विशिष्ट स्थिति पर वीडियोव्यू के अंदर एक वीडियो कैसे देख सकता हूं?

मैं पहले से ही एंड्रॉइड में एक वीडियो स्केल करने के बारे में बहुत सारे लिंक देख रहा हूं, हालांकि मुझे ऐसा करने का कोई तरीका नहीं मिला। उस मुद्दे के बारे में कोई मदद उपयोगी होगी।

मैं जो उपयोग कर रहा हूं वह है कि मेरे पास 2 अलग-अलग वर्ग हैं। उनमें से एक मेरे वीडियो गतिविधि वर्ग और दूसरा एक सहायक वर्ग है:

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

यही वर्ग मेरी मदद सही ढंग से videoview के आयाम स्थापित करने के लिए, फिर भी मैं उस क्षेत्र में वीडियो फिट कर सके। मेरा मतलब है कि मैं उस क्षेत्र में फिट होने के लिए वीडियो को स्केल नहीं कर सका। मुझे नहीं पता कि एंड्रॉइड दिए गए आयामों में ऑटोस्केलिंग कर रहा है या नहीं, लेकिन मैं इसे नहीं कर सका।

+0

http://stackoverflow.com/questions/4434027/android-videoview-orientation-change-with-buffered-video यह लिंक उपयोगी हो सकता है आप –

+0

मैं पहले से ही इस पर जाना है, लेकिन यह कोई फर्क के लिए। डुनो क्यों कठिन – denizt

+2

वैसे मैंने आईसीएस में अपना आवेदन पोर्टिंग के साथ इस मुद्दे को ठीक किया। आईसीएस में यह किसी समस्या के बिना काम करता है। हालांकि जब मैं फ्रायओ के साथ ऐसा करने की कोशिश कर रहा था, तो मुझे कई समस्याएं आईं। अगर कोई उनके साथ भी सामना करता है तो मैं उन पर जाऊंगा। – denizt

उत्तर

2

इस तुम्हारी मदद करेगा मई ...

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

... और एक 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

मुझे लगता है कि आप एक ViewGroup जहां() विधि onLayout लागू करता है सकते हैं बनाने के लिए प्रयास करें।

यहां आप अपने विचारों की स्थिति सीधे उनमें से प्रत्येक के लिए लेआउट() विधि को कॉल कर सकते हैं।

उदाहरण:

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

       } 
      } 
     } 
}; 

आशा की मदद !!