Frage

ein Videoview zu verwenden ist es möglich, einen Skalierungsfaktor für Android zu setzen? Durch die Vorgabe ändert die Größe der Videoanzeige selbst die codierte Auflösung des Videos zu passen. Kann ich Android zwingen, ein Video in eine kleinere oder größere rect zu machen?

War es hilfreich?

Lösung

  

Durch die komprimiert die Größe Video Standardansicht   selbst die codierte Auflösung passen   das Videos.

VideoView (oder die SurfaceView für die Verwendung mit MediaPlayer) wird die Größe, die Sie sagen, es in Ihrem Layout zu sein. In diesem Raum , das Video wird so groß wie möglich wiederzugeben, während das Seitenverhältnis beibehalten wird.

  

Kann ich Kraft Android ein Video machen   in eine kleinere oder größere rect?

Ja. Machen Sie Ihren VideoView die Größe, die Sie mögen, und Android skaliert die Größe der VideoView passen

Andere Tipps

(Ich weiß, es ist sehr alte Frage, aber es ist eine andere Art und Weise zu steuern Dimensionen, die hier nicht beschrieben ist, vielleicht jemand finden es hilfreich.)

Erklären Sie Ihre eigene MyVideoView Klasse in Ihrem Layout und schreiben Sie Ihre eigene onMeasure () Methode. Hier ist, wie Video läuft gestreckt ursprüngliche Ansicht Dimensionen:


public class MyVideoView extends VideoView {
 @Override
 protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  int width = getDefaultSize(0, widthMeasureSpec);
  int height = getDefaultSize(0, heightMeasureSpec);

  setMeasuredDimension(width, height);
 }
}

Ich finde, dass, wenn ein Videoview befindet sich in einem RelativeLayout platziert, die Video-Strecken beide Höhe und Breite der Videoview die angegebene Höhe und Breite (unabhängig von der Video-Aspekt passen Verhältnis). Allerdings, wenn ich die Videoview in einem FrameLayout platzieren, erstreckt sich das Video Höhe und Breite, bis es passt eine von die angegebene Höhe der Videoview oder Breite (dh es spielt keine Seitenverhältnis brechen ). Seltsam, ich weiß, aber das ist, was ich gefunden habe!

Um Satz "centerCrop" Staffelart für VideoView Ihre onMeasure() und layout() Methoden wie folgt aussehen:


public class CenterCropVideoView extends VideoView {
    private int leftAdjustment;
    private int topAdjustment;

 ...
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);

        int videoWidth = getMeasuredWidth();
        int videoHeight = getMeasuredHeight();

        int viewWidth = getDefaultSize(0, widthMeasureSpec);
        int viewHeight = getDefaultSize(0, heightMeasureSpec);

        leftAdjustment = 0;
        topAdjustment = 0;
        if (videoWidth == viewWidth) {
            int newWidth = (int) ((float) videoWidth / videoHeight * viewHeight);
            setMeasuredDimension(newWidth, viewHeight);
            leftAdjustment = -(newWidth - viewWidth) / 2;
        } else {
            int newHeight = (int) ((float) videoHeight / videoWidth * viewWidth);
            setMeasuredDimension(viewWidth, newHeight);
            topAdjustment = -(newHeight - viewHeight) / 2;

        }
    }

    @Override
    public void layout(int l, int t, int r, int b) {
        super.layout(l + leftAdjustment, t + topAdjustment, r + leftAdjustment, b + topAdjustment);
    }
}

Ich versuche auch, dass zu erreichen, und bisher hat dies ok gearbeitet. Die Idee ist es, die setLayoutParams für die Video-Ansicht zu verwenden und die Größe angeben. Es ist nur ein einfaches Fragment, aber es gibt die Idee. Überprüfen Sie die LayoutParams Linien.

VideoView mVideoView = new VideoView(this);

//intermediate code

mVideoView.setVideoPath("/sdcard/VIDEO0007.3gp");
MediaController mController = new MediaController(this);
mVideoView.setMediaController(mController);
mController.setOnTouchListener(new View.OnTouchListener() {

public boolean onTouch(View v, MotionEvent event) {
    int width = mVideoView.getMeasuredWidth();
    int height = mVideoView.getMeasuredHeight();
    //we add 10 pixels to the current size of the video view every time you touch     
    //the media controller.
    LayoutParams params = new LinearLayout.LayoutParams(width+10, height+10);
    mVideoView.setLayoutParams(params);

    return true;
}
});

mVideoView.requestFocus();
mVideoView.start();

Feelgoods Antwort.

Ohne das Layout () Methode des " centerCrop" Tonleiter ist besser, aber die Videoview in einem FrameLayout sein muss.

@Override
public void layout(int l, int t, int r, int b) {
    super.layout(l + leftAdjustment, t + topAdjustment, r + leftAdjustment, b + topAdjustment);
}

Jungs, die ich hatte andere Idee, um Ihre eigene Videoview-Klasse zu erstellen, indem Videoview erstreckt, mit der u tun kann, was auch immer u will ,. genau müssen u paar Methoden in Ihrem Videoview erstellen.

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

}

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

Ihre eigene Konstruktor für ur Videoview Klasse machen und sicherstellen, dass diese Methoden in ur eigenen Videoview Klasse dann verwenden, als wie Androids Standard-Videoview in beiden xml und Klassendateien.

Hope es hilft.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top