Ubah ukuran Tampilan Video

Saya mencoba mengatur ukuran VideoView Android secara dinamis. Saya telah mencari di StackOverflow dan juga internet; dan solusi terbaik yang saya temukan adalah dari di sini. Saya telah meletakkan implementasi saya di bawah ini:

public class ResizableVideoView extends VideoView {

    public ResizableVideoView(Context c) {
        super(c);
    }

    private int mVideoWidth = 100;
    private int mVideoHeight = 100;

    public void changeVideoSize(int width, int height) {
        mVideoWidth = width;      
        mVideoHeight = height;

        // not sure whether it is useful or not but safe to do so
        getHolder().setFixedSize(width, height); 
        
        forceLayout();
        invalidate(); // very important, so that onMeasure will be triggered
    } 

    public void onMeasure(int specwidth, int specheight) {
        Log.i("onMeasure","On Measure has been called");
        setMeasuredDimension(mVideoWidth, mVideoHeight);
    }

    public void onDraw(Canvas c) {
        super.onDraw(c);
        Log.i("onDraw","Drawing...");
    }
}

Video diubah ukurannya dengan benar di emulator Android dan juga di Motorola Droid X; namun pada Motorola Droid, VideoView diubah ukurannya tetapi video yang diputar di VideoView tidak diubah ukurannya. Di Motorola Droid, jika VideoView diatur ke dimensi yang lebih besar daripada pemutaran video, latar belakang hitam akan muncul di VideoView dengan video diputar di sudut kiri atas VideoView di atas latar belakang hitam.

Bagaimana cara mengubah ukuran VideoView dengan benar di Android?

Terima kasih, Vanes


person Vance-Turner    schedule 14.06.2012    source sumber


Jawaban (1)


Implementasi saya berfungsi seperti ini:

RelativeLayout.LayoutParams videoviewlp = new RelativeLayout.LayoutParams(newwidth, newheight);
    videoviewlp.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
    videoviewlp.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
    videoview.setLayoutParams(videoviewlp);
    videoview.invalidate();

Dengan membatalkan tayangan video, Anda akan memaksanya menggambar ulang seluruh tayangan video menggunakan LayoutParams baru (dan dimensi baru).

person Ceetn    schedule 02.10.2012
comment
Saya mengujinya. tapi itu memotong video alih-alih mengubah ukurannya! Apakah kamu punya ide? - person boomz; 14.04.2013
comment
@boomz Saya akhirnya membuat implementasi musim panas lalu. Lihat VideoPlayer dari proyek App Inventor (kode pengubahan ukuran, pada musim panas lalu, adalah pekerjaan saya). - person Vance-Turner; 07.06.2013