2012-09-18 47 views
6

Tôi đã thử phát cùng một video với SurfaceViewTextureView và nhận thấy rằng hình ảnh được hiển thị với TextureView là bí danh hơn (ít 'mịn') so với SurfaceView.Chống răng cưa trong TextureView

Lý do cho việc này là gì? Có cách nào để định cấu hình hiển thị của TextureView để trông đẹp hơn không?

Các TextureView được sử dụng như thế này:

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

Và đối với 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

bạn có thể chỉ cho tôi một số mã của bạn không, bạn sử dụng TextureView như thế nào? –

+0

tôi chỉ cần thêm mã – fiddler

+0

xin lỗi, tôi đã đọc cả hai mã và không có Cờ để đặt, tôi nghĩ MediaPlayer chịu trách nhiệm về hành vi này –

Trả lời

13

Vâng, có vẻ như áp dụng một tỉ lệ (trừ 1) trên TextureView hiện 'mịn 'hiệu ứng mà tôi đang tìm kiếm.

textureView.setScaleX(1.00001f); 

Điều đó nghe có vẻ hơi lạ ... nhưng nó hoạt động. Sẽ rất thú vị khi tìm hiểu những gì được thực hiện trong quy mô thay đổi khía cạnh hiển thị ...

+0

Woooow, thật lạ, nhưng nó thực sự hoạt động: OI tự hỏi làm thế nào bạn phát hiện ra điều này –

+0

Tôi đã chơi khoảng một thời gian dài cho cái này;) – fiddler

+0

Lưu ý rằng các lệnh 'setScale()' là các phương thức Xem. Tôi tò mò liệu phương thức 'setTransform()' của TextureView có mang lại kết quả giống nhau hay khác nhau hay không. – fadden

Các vấn đề liên quan