J'essaie d'utiliser la classe MediaPlayer
pour lire un fichier vidéo. Le problème est que la vidéo ne s'affiche pas du tout, même si je peux entendre le son dans la lecture de la vidéo.
Voici le code d'activité
public class MainActivity extends Activity implements OnClickListener {
private SurfaceView surfaceView;
private Button btnPlay;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
addListener();
}
private void init() {
// TODO Auto-generated method stub
surfaceView = (SurfaceView) findViewById(R.id.surfaceView1);
btnPlay = (Button) findViewById(R.id.btnPlay);
}
private void addListener() {
// TODO Auto-generated method stub
btnPlay.setOnClickListener(this);
}
MediaPlayer mediaPlayer = null;
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnPlay:
try{
if (mediaPlayer != null) {
mediaPlayer.reset();
mediaPlayer.release();
}else{
getWindow().setFormat(PixelFormat.UNKNOWN);
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.wildlife);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.setFixedSize(176, 144);
surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_Push_BUFFERS);
mediaPlayer.setDisplay(surfaceHolder);
mediaPlayer.start();}
}catch (Exception e) {
Toast.makeText(getApplicationContext(), e.getMessage(), Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
}
Voici le code de mise en page XML
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="@dimen/activity_vertical_margin"
Android:paddingLeft="@dimen/activity_horizontal_margin"
Android:paddingRight="@dimen/activity_horizontal_margin"
Android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<SurfaceView
Android:id="@+id/surfaceView1"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true" />
<Button
Android:id="@+id/btnPlay"
style="?android:attr/buttonStyleSmall"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_alignRight="@+id/surfaceView1"
Android:layout_alignTop="@+id/surfaceView1"
Android:text="@string/play" />
</RelativeLayout>
s'il vous plaît dites-moi ce qui doit être fait? Merci d'avance.
Vous pouvez remplacer la fonction onSizeChanged()
de la classe SurfaceView
pour obtenir et définir la taille de la vue.
protected void onSizeChanged (int w, int h, int oldw, int oldh)
Chaque fois que la taille de l'écran a changé, cette classe est appelée.
En tant que deuxième alternative, vous pourrez peut-être définir la taille en définissant les paramètres de présentation (vous ne savez pas si cela fonctionne avec ScrollView):
@Override
public void surfaceCreated(SurfaceHolder holder) {
Android.view.ViewGroup.LayoutParams lp = this.getLayoutParams();
lp.width = 1000; // required width
lp.height = 1000; // required height
this.setLayoutParams(lp);
}
définissez la hauteur et la largeur de la vue pour remplir le parent dans un fichier XML.
<SurfaceView
Android:id="@+id/surfaceView1"
Android:layout_width="fill_parent"
Android:layout_height="fill_parent"
Android:layout_alignParentBottom="true"
Android:layout_alignParentLeft="true"
Android:layout_alignParentRight="true"
Android:layout_alignParentTop="true" />
Eh bien, je ne sais pas si vous avez besoin d'une situation spécifique, mais avez-vous déjà essayé FullscreenVideoView ?
Il essaie de résumer tous les problèmes de SurfaceView et vous pouvez vous concentrer uniquement sur les boutons de l'interface utilisateur. Comme il est ouvert, vous pouvez sous-classer FullscreenVideoView et le personnaliser selon vos besoins.
Définir votre mise en page SurfaceView sur wrap_content ne dimensionnera pas une vidéo afin qu'elle soit lue avec le rapport de format approprié.
Vous pouvez vous référer à ce lien de réponse
https://stackoverflow.com/a/6283676/1441666
Et aussi ce blogLire des médias sur surfaceview avec Android.media.MediaPlayer