2012-09-18 22 views
6

Traté de jugar el mismo video con un SurfaceView y una TextureView y se dio cuenta de que la imagen renderizada con el TextureView es más de alias (menos 'suave') que con el SurfaceView.Antialiasing en TextureView

¿Cuál es el motivo de esto? ¿Hay alguna forma de configurar el renderizado de TextureView para que se vea mejor?

El TextureView se utiliza como esto:

TextureView textureView = new TextureView(this); 
    textureView.setSurfaceTextureListener(new SurfaceTextureListener() { 

     @Override 
     public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) { 
      Log.i("test", "onSurfaceTextureAvailable()"); 
      MediaPlayer player = MediaPlayer.create(TestActivity.this, Uri.parse(VIDEO_URL)); 
      Surface surface = new Surface(surfaceTexture); 
      player.setSurface(surface); 
      player.start(); 
     } 

     @Override 
     public void onSurfaceTextureUpdated(SurfaceTexture surface) { 
      Log.i("test", "onSurfaceTextureUpdated()"); 
     } 

     @Override 
     public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { 
      Log.i("test", "onSurfaceTextureSizeChanged()"); 
     } 

     @Override 
     public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { 
      Log.i("test", "onSurfaceTextureDestroyed()"); 
      return false; 
     } 
    }); 
    setContentView(textureView); 

Y para el SurfaceView:

SurfaceView surfaceView = new SurfaceView(this); 
    surfaceView.getHolder().addCallback(new Callback() { 

     @Override 
     public void surfaceCreated(SurfaceHolder holder) { 
      Log.i("test", "surfaceCreated()"); 
     } 

     @Override 
     public void surfaceDestroyed(SurfaceHolder holder) { 
      Log.i("test", "surfaceDestroyed()"); 
     } 

     @Override 
     public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { 
      Log.i("test", "surfaceChanged()"); 
      MediaPlayer player = MediaPlayer.create(TestActivity.this, Uri.parse(VIDEO_URL)); 
      player.setSurface(holder.getSurface()); 
      player.start(); 
     } 
    }); 
    setContentView(surfaceView); 
+0

me puede mostrar algunos de sus códigos, ¿cómo se usa el TextureView? –

+0

acabo de agregar el código – fiddler

+0

lo siento, he leído los dos códigos, y no hay banderas para establecer, creo que el MediaPlayer es responsable de este comportamiento –

Respuesta

13

Bueno, parece que la aplicación de una escala (distinto de 1) en el TextureView hace el 'suavizado 'efecto que estoy buscando.

textureView.setScaleX(1.00001f); 

Eso suena como un extraño truco ... pero funciona. Sería interesante desenterrar lo que se hace en la escala que cambia el aspecto de representación ...

+0

Woooow, eso es raro, pero realmente funciona: O me pregunto cómo descubriste esto –

+0

He estado jugando durante mucho tiempo para este;) – fiddler

+0

Tenga en cuenta que las llamadas 'setScale()' son métodos de Vista. Tengo curiosidad por saber si el método TextureView 'setTransform()' arroja los mismos o diferentes resultados. – fadden

Cuestiones relacionadas