2012-05-17 7 views
15

Ich versuche gerade, eine Videoansicht zu implementieren, die ein Video an einer bestimmten Position zeigt. Ich kann ein Vollbild-Video ohne Probleme zeigen. Wenn ich jedoch versuche, das Video in einem Frame (z. B. einem kleinen Rechteck) zu zeigen, kann ich nur einen Teil des Videos in dieser Ansicht anzeigen. Ich konnte das Video nicht in diese Ansicht einfügen.Wie kann ich ein Video in einer Videobetrachtung an einer bestimmten Position anzeigen?

Ich suche schon nach vielen Links über die Skalierung eines Videos in Android, aber ich konnte keinen Weg finden, dies zu tun. Jede Hilfe zu diesem Problem wird hilfreich sein.

Was ich benutze ist, ich habe 2 verschiedene Klassen. Einer von ihnen ist meine Video Aktivitätsklasse und andere ist eine Hilfsklasse:

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

Diese Klasse mir helfen Dimensionen des Videoview korrekt jedoch zu setzen, könnte nicht i Video paßt in diese Region machen. Ich meine, ich konnte das Video nicht so skalieren, dass es in diese Region passt. Ich weiß nicht, ob android Autoscaling in gegebene Dimensionen ist, aber ich konnte es nicht tun.

+0

http://stackoverflow.com/questions/4434027/android-videoview-orientation-change-with-buffered-video Dieser Link kann nützlich sein für Sie –

+0

ich schon über sie gehen, aber es keinen Unterschied machen. Weiß nicht, warum hart – denizt

+2

Nun habe ich dieses Problem mit der Portierung meiner Anwendung auf ICS behoben. In ICS funktioniert es ohne Probleme. Aber als ich das mit Froyo versuchte, hatte ich viele Probleme. Ich gehe darüber hinweg, wenn sich auch jemand ihnen stellt. – denizt

Antwort

2

Auch dies wird Ihnen helfen, ...

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

... und RelativeLayout versuchen

<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

Ich glaube, Sie einen Viewgroup erstellen, in dem Sie onLayout-() Methode implementiert werden.

Hier können Sie die Position Ihrer Ansichten direkt festlegen, indem Sie die layout() -Methode für jeden einzelnen aufrufen.

Beispiel:

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

       } 
      } 
     } 
}; 

Hoffnung zu helfen !!