Невозможно преобразовать все элементы RelativeLaout в Bitmap

У меня есть относительный макет следующим образом

<RelativeLayout
            android:id = "@+id/screen_shot_relative_layout"
            android:layout_width = "match_parent"
            android:layout_height = "wrap_content"
            android:background = "@android:color/white">

            <include layout = "@layout/news_content_layout" />

</RelativeLayout>

news_content_layout.xml выглядит следующим образом:

<RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">

//some elements of code

    <TextView
        android:id = "@+id/news_content"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content" />

    <RelativeLayout
        android:id = "@+id/share_footer"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content"
        android:layout_margin = "20dp"
        android:layout_centerHorizontal = "true"
        android:layout_gravity = "center"
        android:visibility = "gone"
        android:layout_below = "@id/news_content">

            //Some more elements

     </RelativeLayout>

</RelativeLayout>

Что я пытаюсь сделать?

Я пытаюсь преобразовать screen_shot_relative_layout (относительный макет) в растровое изображение.

Перед преобразованием макета в растровое изображение я меняю видимость GONE для share_footer на VISIBLE.

Проблема: Растровое изображение не имеет share_footer. Но я вижу это в пользовательском интерфейсе (на экране устройства)

Мой код Java:

    RelativeLayout mShareScreenShotRelativeLayout = itemView.findViewById(R.id.screen_shot_relative_layout);
    RelativeLayout mShareFooterRelativeLayout = itemView.findViewById(R.id.share_footer);

После нажатия кнопки Поделиться:

//Making footer_layout visible
mShareFooterRelativeLayout.setVisibility(View.VISIBLE);

Bitmap bitmap = null;
Uri bitmapUri = null;
bitmap = Utils.viewToBitmap(mShareScreenShotRelativeLayout); //This convets the Layout to image
String bitmapPath = MediaStore.Images.Media.insertImage(mContext.getContentResolver(), bitmap, String.valueOf(articleId), null);

//Sharing the content
Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
                                    sharingIntent.setType("image/jpeg");
sharingIntent.putExtra(Intent.EXTRA_STREAM, bitmapUri);
sharingIntent.putExtra(Intent.EXTRA_TEXT, "Some Text");
sharingIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
mContext.startActivity(Intent.createChooser(sharingIntent, "Share via"))

//Making  footer_layout visibility GONE
mShareFooterRelativeLayout.setVisibility(View.GONE);

bitmap не имеет share_footer. Расскажите пожалуйста bitmapUri = Uri.parse (bitmapPath);

Я не уверен, почему это происходит. Нижний колонтитул является частью родительского элемента, и только его видимость отсутствует. Пожалуйста, помогите мне понять, что не так?

РЕДАКТИРОВАТЬ : Я на 100% уверен, что есть некоторая задержка для обновления представления. Пока представление не обновляется, создается растровое изображение.

Теперь вопрос в том, как с этим справиться?

Есть ли что-нибудь, что делает вид видимым требует времени? Или есть что-то, что мне нужно сделать, например, подождать, чтобы обновить представление ??? Пожалуйста, помогите.

Akshay Taru 10.03.2018 17:42

@CommonsWare вы можете помочь?

Akshay Taru 11.03.2018 12:25
0
2
45
1

Ответы 1

используйте этот способ

public Bitmap viewToBitmap(View view) {
    Bitmap bitmap = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
    Canvas canvas = new Canvas(bitmap);
    view.draw(canvas);
    return bitmap;
}

и позвони сюда

viewToBitmap(mShareFooterRelativeLayout);

Мой метод Utils.viewToBitmap(mShareScreenShotRelativeLayout) имеет такой же код.

Akshay Taru 10.03.2018 17:10

Другие вопросы по теме