2015-10-04 1 views
5

ПРОБЛЕМАCardView тень не отображается при преобразовании в растровый

Я стараюсь, чтобы сохранить вид группу (которая имеет CardView в качестве одного из его Childern) в виде файла PNG. Для достижения этой цели,

  1. Я раздувать вид группы и заполнить мнения с необходимой информацией
  2. Загрузите изображение с точки зрения изображения с помощью Glide
  3. Добавить ViewTreeObserver.OnGlobalLayoutListener в ViewTreeObserver части представления изображения и передать полное (родительское) представление, которое будет передано методу, который преобразует представление в растровое изображение , когда снизу изображения больше нуля (для атрибута высоты изображения для изображения установлено значение wrap_content, поэтому его дно будет равно нулю, пока изображение не станет загружен).

Делая это, я в состоянии преобразовать вид в растровое изображение, однако, с одной оговоркой: Показать CardView «s не отображается на растровом изображении.

Неудачные попытки

До сих пор я пытался:

  1. Переключение между layerType атрибут из "программного обеспечения" на "железо".
  2. Включение и выключение cardUseCompatPadding атрибут CardView.
  3. Пробовал настраивать изображение без использования Glide.
  4. Пробовал без загрузки изображения, доступного на всех.

КОД

Вот фрагменты кода, которые могут помочь вам, ребята, определить проблему:

Метод, используемый для преобразования представления в растр

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; 
} 

макета XML файл представления, который накачивается и передается на getBitmapFromView() выше.

<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> 
+0

Не уверен, если уместно, но, может быть, вы можете попробовать установить небольшой 'android: padding' и' android: clipToPadding = "false" для просмотра карты? – headuck

+0

Довольно уверен, что это не связано с заполнением родительского вида или вида карты. Тень отображается на экране без каких-либо проблем, и достаточно места для обеспечения этого. Спасибо хоть. – fahmy

+0

Я сталкиваюсь с той же проблемой, хотя меня больше интересует получение округлых углов, нарисованных на моем холсте.Ни закругленные углы, ни тени не нарисованы. Я также использую view.draw (canvas) – arberg

ответ

0

просто изменить cardview для просмотра и установите

Android: фон = "@ андроида: рисуем/dialog_holo_light_frame"

ofcause вы должны иметь дело Обивка себя