преобразовать текстовое представление, включая содержимое с экрана, в растровое изображение - PullRequest
1 голос
/ 18 февраля 2011

Я хочу сохранить (экспортировать) содержимое MyView, расширяющего TextView, в растровое изображение.

Я следовал за кодом: [this] [1].

Он отлично работает, когда размер текста небольшой.

Но когда текстов много,и часть содержимого находится за пределами экрана, я получил только то, что было показано на экране.

Затем я добавляю «макет» в свой код:

private class MyView extends TextView{
    public MyView(Context context) {
        super(context);
        // TODO Auto-generated constructor stub
    }

    public Bitmap export(){
        Layout l = getLayout();
        int width = l.getWidth() + getPaddingLeft() + getPaddingRight();
        int height = l.getHeight() + getPaddingTop() + getPaddingBottom();

        Bitmap viewBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(viewBitmap);


        setCursorVisible(false);
        layout(0, 0, width, height);
        draw(canvas);

        setCursorVisible(true);
        return viewBitmap;
    }
}

ТеперьПроизошла странная вещь:

При первом вызове «экспорта» (для этого я использую клавишу выбора), я получил содержимое только на экране.

Когда я снова вызываю «экспорт»Я получил полное содержимое, в том числе и за пределы экрана.

Почему?

Как "экспортировать" представление, включая содержимое, которое не может быть отображено на экране?

Спасибо!

[1]: http://www.techjini.com/blog/2010/02/10/quicktip-how-to-convert-a-view-to-an-image-android/ это

Ответы [ 3 ]

1 голос
/ 28 апреля 2011

Я нашел более простой способ: поместить TextView в ScrollView.Теперь myTextView.draw (canvas) будет рисовать весь текст.

0 голосов
/ 24 февраля 2011

Я решил эту проблему следующим образом (странно, но работает):

public Bitmap export(){
    //...
    LayoutParams lp = getLayoutParams();
    int old_width = lp.width;
    int old_height = lp.height;
    int old_scroll_x = getScrollX();
    int old_scroll_y = getScrollY();
    lp.width = width;
    lp.height = height;
    layout(0, 0, width, height);
    scrollTo(0, 0);
    draw(canvas);
    lp.width = old_width;
    lp.height = old_height;
    setLayoutParams(lp);
    scrollTo(old_scroll_x, old_scroll_y);
    //...

}

0 голосов
/ 18 февраля 2011

Я думаю, что вы должны вычитать отступы из ширины в высоту, а не добавлять его.Добавление этого даст вам область больше, чем экран.

...