2012-02-15 88 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