2016-05-11 5 views
5

Ich versuche das Bild in Gridview zu passen. Aber ich verstehe nicht, woher meine Gridview die Höhe der Ansicht bekommt.Bild in Rasteransicht einpassen

Die Zelle der Rasteransicht ist kleiner als das Bild. Ich möchte das Bild in einer Zelle voll anzeigen. Aber ich möchte die Größe des ImageView nicht hart codieren.

Meine Codes

gridview in 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"/> 

Mein Imageview, die ich Aufpumpen bin.

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

Und meine getView Methode in meiner Adapterklasse

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

Dies ist, was ich

This is what I get

bekommen Und das ist, was erforderlich ist

enter image description here

Antwort

5

Was für mich funktionierte, war diese Zeile zu meiner Bildansicht XML hinzuzufügen.

android:adjustViewBounds="true" 

Jetzt ist mein Ausgang wie, was ich wollte. Danke für die Hilfe jeder

0

Haben Sie versucht, in der getView Überschreibung Methode die Parameter hinzuzufügen:

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 wird auch helfen:

+0

Nein, das Stück Code hilft nicht. Was dies tut ist, dass es das Bild so skaliert, dass es in diese Zellen passt. Was ich will ist eigentlich das Bild sollte die Zelle füllen. –

+0

Vielleicht versuchen Sie 'ScaleType.FIT_CENTER'? – Nevermore

0

Try fitXy auf ImageView wird es versuchen, an die Kanten passen, ohne das Pixel

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

Nein, dieser Code hilft nicht. Dadurch wird das Bild neu skaliert, um die Zelle zu füllen. Aber die Zellengröße ist die gleiche wie die, die ich für den Ausgang bekommen habe. –

+0

Ich sehe, Entschuldigung wegen der falschen Antwort. Ich denke, Sie können Adapter verwenden, um das gesamte Bild in Ihr GridView zu füllen. Sie erhalten also 2 xml. Ein xml ist Ihre Rasteransicht und der andere für Ihre Ansicht auf dem Raster. Sie müssen also nur einen Adapter für Ihre Rasteransicht erstellen. Ich werde 1 weitere Antwort für Sie veröffentlichen. –

0

Das ist Ihre Gridview

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

fügen Sie diese zu einem anderen xml zu gridview.xml hinzufügen -> 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> 

und dass xml Verwendung SquareRelativeLayout addieren Sie dieses 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); 
    } 
} 

Dann jetzt müssen Sie t o Erstellen Sie Ihre Adapter

public class ItemGridAdapter BaseAdapter erstreckt {

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

Dann auf Ihre Hauptklasse, die verwenden gridview.xml

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

Dann können Sie nur auf Ihrem ImageView und Layout spielen. HopeFully das hilft !!

Ich sah Sie verwenden hier Picasso meine Antwort auf die das Bild gesetzt Adapter ist:

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