2015-04-29 1 views
0

У меня есть элемент recyclerview, который содержит карту в корне. Внутри каркаса у меня есть макет, высота которого установлена ​​на wrap_content, и все работает отлично, но то, что я хочу сделать, - это изображение, которое заполнит карту, когда ее видимость будет видимой. Поскольку изображение намного больше, чем у карты, оно поднимает высоту карты. Ширина изображения задается как fill_parent, а height - wrap_content.Как скопировать ImageView в размер CardView в framelayout

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:card_view="http://schemas.android.com/apk/res-auto" 
    xmlns:app="http://schemas.android.com/tools" 
    android:id="@+id/card_view" 
    android:layout_gravity="center" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <FrameLayout 
     android:id="@+id/main_container" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <!-- main container --> 
     <LinearLayout 
      android:id="@+id/main_container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight="1" 
      android:orientation="vertical"> 

      <!-- omitted content --> 

     </LinearLayout> 

     <!-- overlay image --> 
     <ImageView 
      android:id="@+id/completed_image" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:src="@drawable/completed_stamp" 
      android:scaleType="centerCrop" 
      android:cropToPadding="true" 
      android:adjustViewBounds="true" 
      android:visibility="gone"/> 

    </FrameLayout> 

</android.support.v7.widget.CardView> 

В основном я хочу, чтобы обложка была обрезана основной компоновкой, и я не уверен, как это сделать.

Изображение 800 x 800, а ImageView - в центре.

Я в настоящее время пробовал:

FrameLayout.LayoutParams layoutParams = mainContainer.getLayoutParams(); 
imageView.setLayoutParams(layoutParams); 
imageView.requestLayout(); 

в onBindViewHolder

EDIT

Используя этот код в onBindViewHolder:

holder.ImageView.getLayoutParams().height = holder.CardView.getHeight(); 

Это работает, но что она делает применяется изменение размера к следующему которое требует его в списке recyclerview, поэтому его не действительно решение

+2

Можете ли вы опубликовать снимок экрана вашего макета, как он выглядит? – GrIsHu

+0

Я не могу на самом деле сделать скриншот проблемы как своего проприетарного приложения, но если вы думаете о карте, которая представляет собой прямоугольник, который шире, чем он высок, с параметром wrap_content на высоте и наложением изображения, которое изменяется на ширину карты, но из-за того, что изображение квадратное, он сдвигает нижнюю часть карты вниз. Я отредактировал вопрос с дальнейшим прогрессом, который я сделал – CaptRisky

ответ

0

У меня были схожие проблемы с этим раньше, вы можете попробовать добавить параметр cropToPadding к true в вашем представлении изображения. Это может или не может вырезать часть изображения, но если это что-то вроде фотографии профиля, это хорошо, поскольку оно будет масштабироваться в зависимости от размера/плотности устройства/экрана.

+0

Я пробовал это, но безрезультатно, его не изображение профиля в основном изображение, которое накладывает на весь cardView, но расширяется до карты, чтобы соответствовать его высоте. – CaptRisky

+0

Вперед, так что это больше фоновое изображение, на которое вы будете накладывать другой контент в макете кадра? –

+0

Его изображение переднего плана, установленное на View.GONE до его нужного значения, да, в кадре – CaptRisky

 Смежные вопросы

  • Нет связанных вопросов^_^