2012-09-18 102 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