3

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){}
}

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

4

1 に答える 1

2

申し訳ありませんが、これを制御することはできません。これらのサーフェスでどのようなスケーリングが行われるかは定義されていません。ハードウェアとその構成方法によって異なります。また、この種の極端なスケーリングは実際には回避する必要があります。ハードウェアがそれを実行できない場合があり、結果としてパスが遅くなるためです。(たとえば、サーフェスがオーバーレイに配置されている場合、多くのハードウェアオーバーレイエンジンはそのような極端なスケーリングを実行できません。)

于 2012-02-26T02:41:44.220 に答える