Преобразование представления для Побитового отображения, не отображая его в Android?

Я попытаюсь объяснить, что точно я должен сделать.

У меня есть 3 отдельных экрана, говорят что A, B, C. Существует другой названный экран, говорят, что HomeScreen, где все 3 экранных битовых массива должны быть отображены в представлении Gallery и пользователе, может выбрать, в котором представление делает он хочет пойти.

Я смог получить Битовые массивы всех 3 экранов и отобразить его в представлении Gallery путем размещения всего кода в Действие HomeScreen только. Теперь, это усложнило код много, и мне понравится упрощать его.

Так, могу я называть другое Действие от HomeScreen и не отображать его и просто получать Битовый массив того экрана. Например, говорю я, просто называют HomeScreen, и он называет Действие A, B, C, и ни одна из Операций от A, B, C не отображена. Это просто дает Битовый массив того экрана getDrawingCache (). И затем мы можем отобразить те битовые массивы в представлении Gallery в HomeScreen.

Я надеюсь, что объяснил проблему очень ясно.

Сообщите мне, на самом деле ли это возможно.

122
задан Raghav Sood 19 March 2013 в 14:45
поделиться

1 ответ

есть способ сделать это. вам нужно создать Bitmap и Canvas и вызвать view.draw (canvas);

вот код:

public static Bitmap loadBitmapFromView(View v) {
    Bitmap b = Bitmap.createBitmap( v.getLayoutParams().width, v.getLayoutParams().height, Bitmap.Config.ARGB_8888);                
    Canvas c = new Canvas(b);
    v.layout(v.getLeft(), v.getTop(), v.getRight(), v.getBottom());
    v.draw(c);
    return b;
}

если вид не отображался до того, как его размер будет равен нулю. Его можно измерить следующим образом:

if (v.getMeasuredHeight() <= 0) {
    v.measure(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    Bitmap b = Bitmap.createBitmap(v.getMeasuredWidth(), v.getMeasuredHeight(), Bitmap.Config.ARGB_8888);
    Canvas c = new Canvas(b);
    v.layout(0, 0, v.getMeasuredWidth(), v.getMeasuredHeight());
    v.draw(c);
    return b;
}

РЕДАКТИРОВАТЬ: согласно этот пост , Передача WRAP_CONTENT в качестве значения в makeMeasureSpec () не делает чтобы принести пользу (хотя для некоторых классов представлений это действительно работает), и рекомендуемый метод:

// Either this
int specWidth = MeasureSpec.makeMeasureSpec(parentWidth, MeasureSpec.AT_MOST);
// Or this
int specWidth = MeasureSpec.makeMeasureSpec(0 /* any */, MeasureSpec.UNSPECIFIED);
view.measure(specWidth, specWidth);
int questionWidth = view.getMeasuredWidth();
199
ответ дан 24 November 2019 в 01:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: