2012-02-15 86 views
2

可以以低分辨率渲染视图,然后使用的setFixedSize()方法将其缩放以适合视图的实际大小。但是,缩放是通过某种插值完成的,导致一切都变得模糊。
是否有任何方法改变插值的方法最近的邻居或只是把它关闭?按比例缩放SurfaceView更改插值方法

这里是我的意思的例子,制造一个有4x4表面的全屏视图:
What I wantWhat I get
左图:这是我想要的结果看(这里通过绘制完成未经过滤的位图)
右图:这是4x4画布缩放为全屏时发生的情况。

生成正确的图像,如果任何人的兴趣的示例代码:

public class ScaleView extends SurfaceView implements SurfaceHolder.Callback { 
    private final static float[] points = {0,0, 2,0, 4,0, 1,1, 3,1, 0,2, 2,2, 4,2, 1,3, 3,3}; 
    private Paint white; 
    public ScaleView(Context context) { 
     super(context); 
     white = new Paint(); 
     white.setColor(0xFFFFFFFF); 
     getHolder().addCallback(this); 
    } 
    @Override 
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height){ 
     Canvas c = holder.lockCanvas(); 
     try{ 
      c.drawPoints(points, white); 
     }finally{ 
      holder.unlockCanvasAndPost(c); 
     } 
    } 

    @Override 
    public void surfaceCreated(SurfaceHolder holder){ 
     holder.setFixedSize(4, 4); 
    } 
    @Override 
    public void surfaceDestroyed(SurfaceHolder holder){} 
} 

注:上面的方块图案仅仅是我想避免的影响的例子。我正在寻找一种通用的解决方案,可以应用于任何含有任何内容的视图(带有水平面)。

回答

2

对不起,你无法控制这个。没有定义在这些表面上将进行哪种缩放 - 它取决于硬件以及如何配置。此外,这种极端的缩放真的应该避免,因为在某些情况下,硬件无法做到这一点,所以你会以较慢的路径结束。 (例如,如果表面被放入覆盖图中,许多硬件覆盖引擎不能进行这种极端缩放。)

+0

哦,那有点难过。我希望能够以半/四分之一分辨率渲染GLSurfaceView,以获得更加复古低调的效果。 – Jave 2012-02-26 13:50:33

+1

如何预先缩放资源? – snapfractalpop 2012-03-22 16:08:17