2012-09-18 103 views
6

我试图使用SurfaceViewTextureView播放相同的视频,并注意到与TextureView一起呈现的图像比SurfaceView更加混叠(不太“平滑”)。纹理中的抗锯齿查看

这是什么原因?有什么办法可以配置TextureView的渲染看起来更好吗?

TextureView这样使用:

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); 

而对于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

你可以告诉我你们一些代码,你如何使用TextureView? –

+0

我刚刚添加了代码 – fiddler

+0

对不起,我读了两个代码,并且没有设置Flags,我认为MediaPlayer对此行为负责 –

回答

13

好,似乎应用缩放(1以外)的TextureView做了“平滑'我正在寻找的效果。

textureView.setScaleX(1.00001f); 

这听起来像一个奇怪的黑客......但它的工作原理。将有趣的挖掘什么在缩放比例改变了渲染方面...

+0

Woooow,这很奇怪,但它确实有效:OI想知道你是如何发现这个的 –

+0

我一直在玩这个游戏很长时间;) – fiddler

+0

请注意'setScale()'调用是View方法。我很好奇TextureView'setTransform()'方法是否产生相同或不同的结果。 – fadden