【问题标题】:Antialiasing in TextureViewTextureView 中的抗锯齿
【发布时间】:2012-09-18 09:35:26
【问题描述】:

我尝试使用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);

【问题讨论】:

  • 你能给我看一些你的代码吗,你如何使用TextureView?
  • 对不起,我阅读了这两个代码,并且没有设置标志,我认为 MediaPlayer 是造成这种行为的原因

标签: android surfaceview


【解决方案1】:

好吧,似乎在 TextureView 上应用缩放(不是 1)会产生我正在寻找的“平滑”效果。

textureView.setScaleX(1.00001f);

这听起来像是一个奇怪的技巧……但它确实有效。挖掘改变渲染方面的缩放所做的事情会很有趣......

【讨论】:

  • 哇,这很奇怪,但它确实有效:O 我想知道你是怎么发现这个的
  • 我玩这个已经很久了;)
  • 请注意,setScale() 调用是 View 方法。我很好奇 TextureView setTransform() 方法是否产生相同或不同的结果。
猜你喜欢
  • 2014-02-18
  • 1970-01-01
  • 2016-06-28
  • 2011-07-05
  • 2014-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多