IL PROBLEMACardView ombra non fusi volta convertito in bitmap
Sono tenta di salvare un gruppo di viste (che ha un CardView
come uno dei suoi childern) come file PNG. Per raggiungere questo obiettivo,
- ho gonfiare il gruppo di viste e popolare le opinioni con le informazioni richieste
- carico un'immagine per la visualizzazione di un'immagine tramite Glide
- Aggiungi un
ViewTreeObserver.OnGlobalLayoutListener
allaViewTreeObserver
della vista dell'immagine e passare il intera vista (genitore) che verrà condivisa con un metodo che converte la vista in una bitmap quando il limite inferiore della vista immagine è maggiore di zero (l'attributo altezza vista immagine è impostato suwrap_content
, quindi il suo fondo sarà zero fino a quando l'immagine è caricato).
In questo modo, sono in grado di convertire la vista di una bitmap, però, con un avvertimento: spettacolo s' il CardView
non sia reso sulla bitmap.
tentativi falliti
Finora ho provato:
- Passaggio da
layerType
attributo da "software" di "hardware". - Impostazione on e off
cardUseCompatPadding
attributo diCardView
. - Provato a impostare l'immagine disegnabile senza usare Glide.
- Provato senza caricare un'immagine estraibile.
CODICE
Qui ci sono frammenti di codice che potrebbero aiutare voi ragazzi identificare il problema:
Il metodo utilizzato per convertire in vista di una bitmap
public static Bitmap getBitmapFromView(View view) {
//Define a bitmap with the same size as the view
Bitmap b = Bitmap.createBitmap(view.getWidth(), view.getHeight(), Bitmap.Config.ARGB_8888);
//Bind a canvas to it
Canvas canvas = new Canvas(b);
//Get the view's background
Drawable bgDrawable = view.getBackground();
if (bgDrawable != null)
//has background drawable, then draw it on the canvas
bgDrawable.draw(canvas);
else
//does not have background drawable, then draw white background on the canvas
canvas.drawColor(Color.WHITE);
// draw the view on the canvas
view.draw(canvas);
//return the bitmap
return b;
}
di layout XML file della visualizzazione che viene gonfiata e passata allo getBitmapFromView()
precedente.
<LinearLayout 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="match_parent"
android:orientation="vertical"
android:paddingBottom="16dp">
<com.devspark.robototextview.widget.RobotoTextView
android:id="@+id/title"
style="@style/text_subhead"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="top"
android:layout_marginBottom="@dimen/lessons_horizontal_margin_narrow"
android:layout_marginLeft="@dimen/lessons_horizontal_margin_narrow"
android:layout_marginRight="@dimen/lessons_horizontal_margin_narrow"
android:layout_marginTop="@dimen/lessons_horizontal_margin_narrow"
android:gravity="left"
app:typeface="roboto_medium" />
<com.devspark.robototextview.widget.RobotoTextView
android:id="@+id/text"
style="@style/text_subhead"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="@dimen/lessons_horizontal_margin_narrow"
android:layout_marginRight="@dimen/lessons_horizontal_margin_narrow"
android:gravity="left"
android:textColor="@color/text"
app:typeface="roboto_regular" />
<android.support.v7.widget.CardView
android:id="@+id/image_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/lessons_horizontal_margin_narrow"
app:cardCornerRadius="@dimen/lessons_image_card_corner_radius"
app:cardElevation="3dp"
app:cardPreventCornerOverlap="false"
app:cardUseCompatPadding="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.makeramen.roundedimageview.RoundedImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:contentDescription="@null"
app:riv_corner_radius_top_left="@dimen/lessons_image_card_corner_radius"
app:riv_corner_radius_top_right="@dimen/lessons_image_card_corner_radius" />
<com.devspark.robototextview.widget.RobotoTextView
android:id="@+id/caption"
style="@style/text_caption"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/lessons_image_card_caption_margin"
android:gravity="left"
app:typeface="roboto_condensed_regular" />
</LinearLayout>
</android.support.v7.widget.CardView>
<!-- Some other views that aren't particularly interesting -->
</LinearLayout>
Non sono sicuro se rilevante, ma forse potresti provare a impostare un piccolo 'android: padding', e' android: clipToPadding = "false" 'per il cardview? – headuck
Assicurati che non sia correlato al padding della vista genitore o della vista della scheda. L'ombra viene visualizzata sullo schermo senza alcun problema e viene fornito spazio sufficiente per garantire che. Grazie comunque. – fahmy
Affronto lo stesso problema, anche se sono più interessato a ottenere gli angoli arrotondati disegnati sulla mia tela.Non vengono disegnati né angoli arrotondati, né ombre. Uso anche view.draw (tela) – arberg