2016-05-11 5 views
5

Я пытаюсь подогнать изображение в gridview. Но я не понимаю, откуда мой gridview получает высоту представления.Fit Image to grid view

Ячейка вида сетки меньше изображения. Я хочу показать изображение, полное в ячейке. Но я не хочу жестко кодировать размер ImageView.

Мои коды

GridView в XML

<GridView 
    android:id="@+id/gridview_movie_list" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_gravity="center" 
    android:numColumns="auto_fit" 
    android:columnWidth="185dp" 
    android:stretchMode="columnWidth"/> 

Мой ImageView, который я накачивания.

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="centerCrop"/> 

И мой метод GetView в моем классе адаптера

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 

    LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(
      mContext.LAYOUT_INFLATER_SERVICE); 
    ImageView imageView; 

    if (convertView == null) { 
     imageView = (ImageView) inflater.inflate(R.layout.grid_view_item, null); 
    } else { 
     imageView = (ImageView) convertView; 
    } 

    Picasso.with(mContext).setLoggingEnabled(false); 
    Picasso.with(mContext) 
      .load(imageResource[position]) 
      .into(imageView); 

    return imageView; 
} 

Это то, что я получаю

This is what I get

И это то, что требуется

enter image description here

ответ

5

Что сработало для меня, это добавить эту строку в мой образ xml.

android:adjustViewBounds="true" 

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

0

Вы пробовали, в методе GetView переопределения для добавления параметров:

imageView.setScaleType(ImageView.ScaleType.CENTER); // Replace default CENTER_CROP 
// Try ScaleType.CENTER or ScaleType.CENTER_INSIDE 
imageView.setPadding(8, 8, 8, 8); // why not be explicit about the padding while we're at it 

документы Good Ol»поможет также:

+0

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

+0

Возможно, попробуйте 'ScaleType.FIT_CENTER'? – Nevermore

0

Try fitXy на ImageView будет стараться соответствовать краям без уменьшения пикселя

<ImageView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scaleType="fitXY"/> 
+0

Этот код не помогает. Это означает, что он масштабирует изображение, чтобы заполнить ячейку. Но размер ячейки такой же, как и то, что я получал раньше. –

+0

Вижу, извините за ошибочный ответ. Я думаю, вы можете использовать адаптер для заполнения всего изображения в своем GridView. Таким образом, вы получите 2 xml один xml - ваш вид сетки, а другой - для вашего вида на сетке. поэтому вам просто нужно создать адаптер для вашего вида сетки. Я отправлю вам еще один ответ. –

0

Это ваш Gridview добавить в gridview.xml

<GridView 
    android:id="@+id/clueGrid" 
    android:layout_width="280dp" 
    android:layout_height="match_parent" 
    android:layout_below="@id/gameInstructions" 
    android:layout_centerHorizontal="true" 
    android:horizontalSpacing="20dp" 
    android:verticalSpacing="20dp" 
    android:paddingTop="10dp" 
    android:numColumns="2" 
    /> 

добавить это в другой XML -> grid_view_image.xml

<com.XXXX.view.SquareRelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:background="@drawable/grid_item_background" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

<ImageView 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:src="@drawable/clue_found" 
    android:layout_alignParentRight="true" 
    android:layout_marginRight="10dp" 
    android:layout_marginBottom="10dp" 
    android:layout_alignParentBottom="true" 
    android:id="@+id/itemView"/> 

</com.XXXX.view.SquareRelativeLayout> 

и использование XML SquareRelativeLayout добавить это Java

public class SquareRelativeLayout extends RelativeLayout { 

    public SquareRelativeLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec){ 
     super.onMeasure(widthMeasureSpec, widthMeasureSpec); 
    } 
} 

Тогда Теперь вам нужно t о создании вашего адаптера

общественного класс ItemGridAdapter расширяет BaseAdapter {

List<Item> itemList; 

public ItemGridAdapter(List<Item> itemList){ 
    this.itemList = itemList; 
} 

@Override 
public int getCount() { 
    return itemList.size(); 
} 

@Override 
public Object getItem(int position) { 
    return itemList.get(position); 
} 

@Override 
public long getItemId(int position) { 
    return position; 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null){ 
     LayoutInflater inflater = LayoutInflater.from(parent.getContext()); 
     convertView = inflater.inflate(R.layout.grid_view_image, parent, false); 
    } 
    final ImageView itemView = (ImageView) convertView.findViewById(R.id.itemView); 
    itemView.setImageDrawable("YOUR DRAWABLE"); 
    return convertView; 
} 
} 

Тогда на основном классе, который использует GridView.xml

ItemGridAdapter itemGridAdapter = new ItemGridAdapter(itemList); 
itemGrid.setAdapter(itemGridAdapter); 

Тогда вы можете поиграть только с вашим ImageView и макетом. Надеюсь, это поможет!

Я видел, как вы используете Пикассо здесь мой ответ для адаптера, установленного изображения:

Target target = new Target() { 
      @Override 
      public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { 
       itemView.setImageBitmap(bitmap); 
      } 

      @Override 
      public void onBitmapFailed(Drawable errorDrawable) { 
       // Meh 
      } 

      @Override 
      public void onPrepareLoad(Drawable placeHolderDrawable) { 
       // Meh 
      } 
     }; 

    Picasso.with(convertView.getContext()) 
       .load(imageUrl) 
       .into(target);