У меня есть относительный макет следующим образом
<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% уверен, что есть некоторая задержка для обновления представления. Пока представление не обновляется, создается растровое изображение.
Теперь вопрос в том, как с этим справиться?
@CommonsWare вы можете помочь?
используйте этот способ
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) имеет такой же код.
Есть ли что-нибудь, что делает вид видимым требует времени? Или есть что-то, что мне нужно сделать, например, подождать, чтобы обновить представление ??? Пожалуйста, помогите.