Utilizzo di VideoView È possibile impostare un fattore di scala per Android? Di default la vista video si ridimensiona per adattarsi alla risoluzione codificata del video. Posso forzare Android a rendere un video in un rect più piccolo o più grande?Android supporta il ridimensionamento dei video?
risposta
per impostazione predefinita la visualizzazione di video ridimensiona stesso per adattarsi alla risoluzione codificata del video.
VideoView
(o SurfaceView
per l'uso con MediaPlayer
) sarà la dimensione gli si dice di essere nel layout. All'interno dello spazio, il video verrà riprodotto il più grande possibile mantenendo le proporzioni.
Posso forzare Android a rendere un video in un rect più piccolo o più grande?
Sì: rendere il vostro VideoView
essere la dimensione che si desidera, e Android scalerà per adattarsi alle dimensioni del VideoView
.
(lo so che è molto vecchia questione, ma c'è un altro modo per controllare le dimensioni, che non viene qui descritto, forse qualcuno lo troverà utile.)
Dichiarare il proprio MyVideoView classe nel layout e scrivi il tuo metodo onMeasure(). Ecco come eseguire il video allungato alle dimensioni originali della vista:
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);
}
}
Sto anche cercando di ottenere ciò e finora questo ha funzionato bene. L'idea è di usare setLayoutParams per la vista video e specificare la dimensione. È solo un semplice frammento ma dà l'idea. Controlla le linee LayoutParams.
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();
Trovo che quando un VideoView è posizionato all'interno RelativeLayout, il video estende sia altezza e larghezza per adattarsi all'altezza specificata del VideoView e larghezza (indipendentemente dal formato video). Tuttavia, quando inserisco VideoView in un FrameLayout, il video allunga l'altezza e la larghezza finché corrisponde a uno di l'altezza o la larghezza specificata della Vista video (ovvero non rompe le proporzioni). Strano, lo so, ma è quello che ho trovato!
Ragazzi Ho avuto altre idee per creare la tua classe VideoView estendendo VideoView, con cui puoi fare quello che vuoi ,. esattamente devi creare un paio di metodi nella tua VideoView.
public void setDimensions(int w, int h) {
this.mForceHeight = h;
this.mForceWidth = w;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(mForceWidth, mForceHeight);
}
rendere il proprio costruttore di ur classe VideoView e assicurarsi che questa modalità di ur propria classe VideoView quindi utilizzarlo come come androidi predefinita VideoView in entrambi i file XML e di classe.
Spero che aiuti.
Per impostare il tipo di scala "centerCrop"
per VideoView
tuo onMeasure()
e layout()
metodi possono apparire come segue:
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);
}
}
Ho avuto un problema con questo, cercando di riprodurre un video, la VideoView stava ridimensionando prima la larghezza ottenendo una Regolazione sinistra e poi l'altezza in modo che la Regolazione sinistra originale era impostata su 0 Ho risolto rimuovendo l'inizializzazione delle variabili nella classe private int leftAdjustment = 0; private int topAdjustment = 0; e rimozione leftAdjustment = 0; topAdjustment = 0; dall'interno del metodo Grazie per la soluzione, un buon modo per ritagliare il video senza dover usare TextureView API 14 e perdere la compatibilità – AntPachon
devi cambiare la linea del metodo di layout in 'super.layout (l + leftAdjustment, t + topAdjustment, r - leftAdjustment, b - topAdjustment); ' . Altrimenti sposterà semplicemente il tuo vidoView, ma non cambierà la sua dimensione – rstk
Suppongo che il ridimensionamento sia raggiunto da setMeasuredDimension() in onMeasure(). Ho usato quel codice in https://play.google.com/store/apps/details?id=ru.zenrus.android, e ha funzionato. Hai controllato il tuo suggerimento? – FeelGood
To Feelgoods risposta.
Senza il metodo layout() il tipo di scala "centerCrop" è migliore, ma VideoView deve essere in un FrameLayout.
@Override
public void layout(int l, int t, int r, int b) {
super.layout(l + leftAdjustment, t + topAdjustment, r + leftAdjustment, b + topAdjustment);
}
- 1. Android supporta il ritaglio video?
- 2. Verifica se il dispositivo Android supporta video 4K?
- 3. Il video player video.js supporta i video di YouTube?
- 4. Come disabilitare il ridimensionamento dei caratteri in RN per Android?
- 5. Ridimensionamento dei controlli con ridimensionamento modulo
- 6. Ridimensionamento dei contenitori FlexBox
- 7. Video AndroidVisualizzazione dei video sequenziali
- 8. Ridimensionamento <video> elemento div principale
- 9. Owl Carousel video ridimensionamento non reattivo
- 10. dinamica ridimensionamento di Vimeo Video (o Youtube)
- 11. Il browser di Android 2.1 supporta HTML 5 e quale formato video riproduce?
- 12. Android. Evitare il ridimensionamento dello sfondo
- 13. Ridimensionamento dei valori in PHP
- 14. Ridimensionamento del browser Android?
- 15. Ridimensionamento widget Android
- 16. Ridimensionamento dei microservizi tramite Docker
- 17. Come associare il ridimensionamento dello stage con il ridimensionamento dei componenti?
- 18. Lettore video HTML5: caricamento dinamico dei video
- 19. Riproduzione video nativa Android con canale alfa
- 20. ExtJS: ridimensionamento automatico dei campi modulo al ridimensionamento della finestra
- 21. Android supporta jquery?
- 22. Android Studio supporta Maven?
- 23. Tensorflow - classificazione dei video
- 24. Solo video HTML Appare sul ridimensionamento della finestra
- 25. HTML5 video: ricerca accurata dei frame sui dispositivi Android?
- 26. Filtro video Android
- 27. Il ridimensionamento automatico delle dimensioni dei caratteri funziona per Android, utilizzando appcelerator?
- 28. Browser senza testa che supporta video HTML 5?
- 29. ridimensionamento e regolazione dei controlli del modulo secondo il ridimensionamento del modulo
- 30. Impedisci il ridimensionamento del documento/ridimensionamento del browser quando si apre la tastiera di Android
Brillante, sai di un modo per rompere le proporzioni? – haseman
Che io non, mi dispiace. – CommonsWare
Devo aggiungere che non tutte le piattaforme lo fanno correttamente. Ad esempio, il Droid Eris sembra ridimensionare il video fino alla sua risoluzione nativa, espandendo la visualizzazione del video man mano che procede. Frammentazione della piattaforma ahoy !! – haseman