Визуализация представления в растровое изображение вне экрана в Android - PullRequest
3 голосов
/ 22 октября 2011

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

Я пробовал это:

    LayoutInflater inflater = getLayoutInflater();
    View linearview = (View) findViewById(R.id.linearview);
    linearview = inflater.inflate(R.layout.intro, null);


Bitmap bm = Bitmap.createBitmap( linearview.getMeasuredWidth(), linearview.getMeasuredHeight(), Bitmap.Config.ARGB_8888);                
Canvas c = new Canvas(bm);
linearview.layout(0, 0, linearview.getLayoutParams().width, linearview.getLayoutParams().height);
linearview.draw(c);

    String extStorageDirectory = Environment.getExternalStorageState().toString();
    extStorageDirectory = Environment.getExternalStorageDirectory().toString();
    OutputStream outStream = null;
    File file = new File(extStorageDirectory, "screen1.PNG");

    try {
        outStream = new FileOutputStream(file);
        bm.compress(Bitmap.CompressFormat.PNG, 100, outStream);
        outStream.flush();
        outStream.close();


    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

РЕДАКТИРОВАТЬ: мое приложение вылетает, потому что представление не имеет ширины или высоты.(мера - попытка исправить это)

И извините за плохой английский.

1 Ответ

1 голос
/ 12 ноября 2013

Проблема здесь:

linearview = inflater.inflate(R.layout.intro, null);

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

public View inflate (int resource, ViewGroup root, boolean attachToRoot)

Изофициальная документация по параметрам:

root : Необязательное представление, чтобы быть родителем сгенерированной иерархии (если attachToRoot имеет значение true), или просто объект, который предоставляет наборзначений LayoutParams для корня возвращаемой иерархии (если attachToRoot имеет значение false.)

attachToRoot : должна ли завышенная иерархия быть присоединена к корневому параметру?Если false, root используется только для создания правильного подкласса LayoutParams для корневого представления в XML.

Если вы сомневаетесь, вы всегда можете передать содержимое приложения в качестве родительского макета:

findViewById(android.R.id.content);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...