2016-05-11 26 views
5

Próbuję dopasować obraz do widoku siatki. Ale nie rozumiem, skąd mój gridview osiąga wysokość widoku.Dopasuj obraz do widoku siatki

Komórka widoku siatki jest mniejsza niż obraz. Chcę wyświetlić pełny obraz w komórce. Ale nie chcę twardo kodować rozmiaru ImageView.

Moi kody

GridView w 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"/> 

Moja ImageView której jestem pompowania.

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

I moja metoda getView w mojej klasie adaptera

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

To co mam

This is what I get

I to jest to, co jest wymagane

enter image description here

Odpowiedz

5

To, co zadziałało, to dodanie tej linii do mojego xml widoku obrazu.

android:adjustViewBounds="true" 

Teraz moje wyniki są takie, jak chciałem. Dzięki za pomoc każdy

0

Czy próbowałeś w sposobie getView override dodać parametry:

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 

docs good ol”pomogą też:

+0

Nie ten kawałek kodu nie pomaga. Zmienia obraz, aby pasował do tych komórek. To, czego chcę, to w rzeczywistości obraz powinien wypełnić komórkę. –

+0

Może wypróbujesz 'ScaleType.FIT_CENTER'? – Nevermore

0

Try fitXy na ImageView spróbuje dopasować się do krawędzi bez zmniejszania piksela

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

Nie ten fragment kodu nie pomaga. Zmienia obraz, aby wypełnić komórkę. Ale rozmiar komórki jest taki sam jak to, co otrzymywałem wcześniej. –

+0

Rozumiem, przepraszam za błędną odpowiedź. Myślę, że możesz użyć adaptera do zapełnienia całego obrazu w twoim GridView. Tak więc skończysz z 2 xml jeden xml to twój widok siatki, a drugi dla twojego widoku na siatce. więc wystarczy utworzyć adapter dla widoku siatki. Napiszę dla ciebie jeszcze 1 odpowiedź. –

0

To jest Twój GridView dodać do 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" 
    /> 

dodać to do innego 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> 

i że użycie xml SquareRelativeLayout dodaj tę Javę

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

Teraz potrzebujesz teraz O tworzyć Adapter

public class ItemGridAdapter rozciąga 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; 
} 
} 

Następnie na głównej klasy, które używają GridView.xml

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

Następnie można bawić się tylko na swojej ImageView i układu. Mam nadzieję, że to pomaga!

Widziałem użyć Picasso tutaj jest moja odpowiedź dla adaptera ustawić obraz:

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