0

これらのコードのパフォーマンスを向上させる方法を教えてください。基本的には、BitmapDrawable を描画し、それを ImageView のドローアブルとして使用してから、TableView の TableRow に配置します。

private void drawTableData() {
    TableLayout table = new TableLayout(this);

    BitmapDrawable bm;
    TableRow row = new TableRow(this);
    String rowData = "A1;A2;A3;A4;A5;A6;A7;A8;A9;A10;A11;A12;";
    String[] tmpRowData = rowData.split("\\;");

    for (String str : tmpRowData) {
        ImageView img = new ImageView(this);
        bm = writeOnDrawable(R.drawable.seat_check_icon, str);
        img.setImageDrawable(bm);
        img.setLayoutParams(new TableRow.LayoutParams(20, 20));
        row.addView(img);
    }
    table.addView(row, new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
}

public BitmapDrawable writeOnDrawable(int drawableId, String text) {
    Bitmap bm = BitmapFactory.decodeResource(getResources(), drawableId).copy(Bitmap.Config.ARGB_8888, true);
    Paint paint = new Paint();
    paint.setAntiAlias(true);
    paint.setTypeface(Typeface.DEFAULT_BOLD);
    paint.setStyle(Style.FILL);
    paint.setColor(txtColor);
    paint.setTextSize((float) 14);

    Rect bounds = new Rect();
    paint.getTextBounds(text, 0, text.length(), bounds);
    int height = bounds.bottom + bounds.height();
    int width = bounds.left + bounds.width();

    float canvasWidth = bm.getWidth();
    float canvasHeight = bm.getHeight();
    float startPositionX = (canvasWidth - width) / 2;
    float startPositionY = (canvasHeight + height) / 2;

    Canvas canvas = new Canvas(bm);
    canvas.drawText(text, startPositionX, startPositionY, paint);
    return new BitmapDrawable(this.getResources(), bm);
}

どんな提案でも大歓迎です。前もって感謝します。

4

1 に答える 1

0

以下に 3 つ (および 1 つ) の提案を示します。

  • オブジェクトを作成して初期化するPaintのは、描画を行うたびに行うのではなく、1 回だけにしてください。
  • 描画するビットマップが常に同じである場合は、プリロードして保持します。
  • カスタムDrawableクラスを直接作成し、そのdraw()メソッドでペイントを行うことができます。

  • ラジカル (ニーズに当てはまらない場合があります): レイアウトでImageView、ビットマップを使用して 1 つを作成し、そのTextView上にテキスト用に を配置します。

于 2013-07-03T06:37:23.837 に答える