可以以低分辨率渲染视图,然后setFixedSize()
使用SurfaceHolder
. 但是,缩放是通过某种插值完成的,导致一切都变得模糊。
有什么方法可以将插值方法更改为最近邻居或将其关闭?
这是我的意思的一个例子,在全屏视图中使用 4x4 表面制作:
左图:这是我希望结果的外观(这里通过绘制未过滤的位图来实现)
右图:这是当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){}
}
注意:上面的方形图案只是我想要避免的效果的一个例子。我正在寻找一个通用的解决方案,可以应用于任何内容的任何视图(带有表面支架)。