2015-12-18 6 views
1

Я работаю на пользовательский макет RecyclerView с GridLayoutManagerRecyclerview с пользовательскими GridlayoutManager андроида

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

enter image description here

adapter.java

@Override 
    public void onBindViewHolder(ProfilePhotosViewHolder ProfilePhotosViewHolder, final int position) { 

     model = list.get(position); 


     if (position == 0) { 
      ProfilePhotosViewHolder.relativeBucket.setVisibility(View.VISIBLE); 
      ProfilePhotosViewHolder.relativeBucket.setDrawingCacheEnabled(true); 
      ProfilePhotosViewHolder.relativeBucket.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
      ProfilePhotosViewHolder.relativeBucket.layout(0, 0, ProfilePhotosViewHolder.relativeBucket.getMeasuredWidth(), ProfilePhotosViewHolder.relativeBucket.getMeasuredHeight()); 
      ProfilePhotosViewHolder.relativeBucket.buildDrawingCache(true); 
      Bitmap b = Bitmap.createBitmap(ProfilePhotosViewHolder.relativeBucket.getDrawingCache()); 
      ProfilePhotosViewHolder.relativeBucket.setDrawingCacheEnabled(false); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      ProfilePhotosViewHolder.imgProfilePhotos.setImageBitmap(b); 
     } 

     if (position == 2) { 
      ProfilePhotosViewHolder.relativeFollowers.setVisibility(View.VISIBLE); 
      ProfilePhotosViewHolder.relativeFollowers.setDrawingCacheEnabled(true); 
      ProfilePhotosViewHolder.relativeFollowers.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
      ProfilePhotosViewHolder.relativeFollowers.layout(0, 0, ProfilePhotosViewHolder.relativeFollowers.getMeasuredWidth(), ProfilePhotosViewHolder.relativeFollowers.getMeasuredHeight()); 
      ProfilePhotosViewHolder.relativeFollowers.buildDrawingCache(true); 
      Bitmap b = Bitmap.createBitmap(ProfilePhotosViewHolder.relativeFollowers.getDrawingCache()); 
      ProfilePhotosViewHolder.relativeFollowers.setDrawingCacheEnabled(false); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      ProfilePhotosViewHolder.imgProfilePhotos.setImageBitmap(b); 
     } 
     if (position == 5) { 
      ProfilePhotosViewHolder.relativeFollowing.setVisibility(View.VISIBLE); 
      ProfilePhotosViewHolder.relativeFollowing.setDrawingCacheEnabled(true); 
      ProfilePhotosViewHolder.relativeFollowing.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
      ProfilePhotosViewHolder.relativeFollowing.layout(0, 0, ProfilePhotosViewHolder.relativeFollowing.getMeasuredWidth(), ProfilePhotosViewHolder.relativeFollowing.getMeasuredHeight()); 
      ProfilePhotosViewHolder.relativeFollowing.buildDrawingCache(true); 
      Bitmap b = Bitmap.createBitmap(ProfilePhotosViewHolder.relativeFollowing.getDrawingCache()); 
      ProfilePhotosViewHolder.relativeFollowing.setDrawingCacheEnabled(false); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      ProfilePhotosViewHolder.imgProfilePhotos.setImageBitmap(b); 
     } 
     if (position == 7) { 
      ProfilePhotosViewHolder.relativePosts.setVisibility(View.VISIBLE); 
      ProfilePhotosViewHolder.relativeFollowing.setDrawingCacheEnabled(true); 
      ProfilePhotosViewHolder.relativeFollowing.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), 
        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); 
      ProfilePhotosViewHolder.relativeFollowing.layout(0, 0, ProfilePhotosViewHolder.relativeFollowing.getMeasuredWidth(), ProfilePhotosViewHolder.relativeFollowing.getMeasuredHeight()); 
      ProfilePhotosViewHolder.relativeFollowing.buildDrawingCache(true); 
      Bitmap b = Bitmap.createBitmap(ProfilePhotosViewHolder.relativeFollowing.getDrawingCache()); 
      ProfilePhotosViewHolder.relativeFollowing.setDrawingCacheEnabled(false); 
      ByteArrayOutputStream bytes = new ByteArrayOutputStream(); 
      b.compress(Bitmap.CompressFormat.JPEG, 100, bytes); 
      ProfilePhotosViewHolder.imgProfilePhotos.setImageBitmap(b); 
     } 
     ProfilePhotosViewHolder.imgProfilePhotos.setImageResource(model.photos); 

     ProfilePhotosViewHolder.imgProfilePhotos.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mMethods.showToast(mContext, "" + position); 
      } 
     }); 

    } 

layout.xml

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

    <ImageView 
     android:id="@+id/img_photos" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:adjustViewBounds="true" 
     android:scaleType="fitXY" 
     android:src="@drawable/im_profile_monuments" /> 


    <RelativeLayout 
     android:id="@+id/relative_bucket" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:background="@color/grey_box" 
     android:paddingBottom="10dp" 
     android:paddingLeft="5dp" 
     android:paddingRight="5dp" 
     android:paddingTop="10dp" 
     android:visibility="gone"> 

     <ImageView 
      android:id="@+id/img_profile_bucket" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" 
      android:src="@drawable/ic_profile_my_bucketlist" /> 

     <TextView 
      android:id="@+id/tv_profile_bucket_count" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/img_profile_bucket" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="10dp" 
      android:gravity="center" 
      android:singleLine="true" 
      android:text="My" 
      android:visibility="visible" 
      android:textColor="@color/white" 
      android:textSize="@dimen/txt_medium" /> 
     /> 

     <TextView 
      android:id="@+id/tv_profile_bucket_list" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_below="@+id/tv_profile_bucket_count" 
      android:layout_centerHorizontal="true" 
      android:layout_marginTop="10dp" 
      android:gravity="center" 
      android:singleLine="true" 
      android:text="Bucket list" 
      android:textColor="@color/white" 
      android:textSize="@dimen/txt_medium" /> 
     /> 

    </RelativeLayout> 

Проблема заключается в том, что пользовательский макете, который преобразуется в Bitmap в соответствии с фиксированным положением правильно

enter image description here

+0

удалить 'андроид: SingleLine = "истинный"' от макета. – Budius

+0

не имеет значения :( –

ответ

0

не выровнен Для сохранения вида квадрата зрения Recycler:

к onBind функции ViewHolder Я прошел ширину столбца (он был рассчитан как размер экрана/количество столбцов), а внутри ViewHolder был

itemView.setLayoutParams(new FrameLayout.LayoutParams(width, width)); 

где itemView - вид ViewHolder, а ширина - ширина столбца. Конечно, для этого нужен FrameLayout.

надеюсь, что это поможет.

веселит

EDIT: Вы можете использовать

itemView.setLayoutParams(new RelativeLayout.LayoutParams(width, width)); 

если родитель является относительной раскладкой

+0

Должен ли я сделать свой пользовательский RelativeLayout в FrameLayout? –

+0

, поскольку я вижу, что есть конструктор 'new RelativeLayout.LayoutParams (int, int)', поэтому вы можете попробовать это :) извините за пропущенный –

+0

Проблема в том, что если я исправлю размер моего RelativeLayout, остальные изображения в сетке будут скорректированы в соответствии с размером экрана, но мой RelativeLayout останется прежним :( –

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