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){}
}
注:上記の正方形のパターンは、回避したい効果の一例にすぎません。任意のコンテンツを含む任意のビュー (サーフェスホルダーを使用) に適用できる一般的なソリューションを探しています。