3

私の問題はこれです:

NinePatchを使用して作成された再スケーリングされたビットマップを作成する必要があります。

私の現在のシステムは、NinePatchファイルからビットマップを作成します。次に、これはNinePatch(またはNinePatchDrawable)に送られます。次に、サイズを変更して別のビットマップに出力する必要があります。

私はこれをレビューしました、そしてそれはかなり役に立ちました。

これが私の現在のコードです:

try {
        Bitmap bitmap1 = BitmapFactory.decodeStream(getAssets().open("gfx/head.9.png"));

        // Using NinePatch?
        NinePatch patch = new NinePatch(bitmap1, bitmap1.getNinePatchChunk(), null);
        // Or NinePatchDrawable?
        NinePatchDrawable patch = new NinePatchDrawable(bitmap1, bitmap1.getNinePatchChunk(), new Rect(), null);

        // Set dimensions from NinePatch and create new bitmap
        // Bitmap bitmap2 = ?
}
catch (IOException e) {
        e.printStackTrace();
}
4

3 に答える 3

15
public static Bitmap get_ninepatch(int id,int x, int y, Context context){
        // id is a resource id for a valid ninepatch

        Bitmap bitmap = BitmapFactory.decodeResource(
                context.getResources(), id);

        byte[] chunk = bitmap.getNinePatchChunk();
        NinePatchDrawable np_drawable = new NinePatchDrawable(bitmap,
                chunk, new Rect(), null);
        np_drawable.setBounds(0, 0,x, y);

        Bitmap output_bitmap = Bitmap.createBitmap(x, y, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(output_bitmap);
        np_drawable.draw(canvas);

        return output_bitmap;
    }

XとYは、ninepatchの大きさです。コンテキストは、アプリケーションコンテキストであるため、idにあるninepatchリソースを取得できます。

このビットマップをOpenGLで使用する場合は、XおよびYは2の累乗である必要があることに注意してください。

于 2011-07-26T10:37:29.417 に答える
0

NinePatchDrawableを描画する方法を尋ねていますか?その場合は、描画先のビットマップを指すCanvasを作成し、Drawable.draw()を使用してNinePatchDrawableをCanvasにレンダリングします。必ずDrawable.setBoundsを使用して必要なサイズを設定してください。

于 2011-07-23T18:48:50.717 に答える
0

Tasomaniac-そのメソッドのxとyを取得するために、ウィンドウまたはレイアウトのサイズ、あるいは9パッチに必要なものを使用しています。ウィンドウまたはレイアウトのサイズを変更できる場合は、xとyを幅と高さでプラグインするだけです(例:popwindow)object.getViewTreeObserver()。addOnGlobalLayoutListener(new OnGlobalLayoutListener()...特定のオブジェクトまたはレイアウトでは、xとyを整数に変換するだけです。

于 2013-07-25T06:32:51.363 に答える