2015-07-26 14 views
6

Per la precisione, voglio raggiungere questo obiettivo. enter image description hereCome rendere la prima immagine più grande in Gridlayout?

Sto usando recyclerview con GridLayoutManager. Ho anche fatto primo elemento grande utilizzando il seguente codice

 lLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { 
     @Override 
     public int getSpanSize(int i) { 
      if (i==0) return 2; 
      else return 1; 
     } 
    }); 

Tutto funziona benissimo tranne uno: La voce nella posizione 1 (cioè reca immagine grande da) è allungata verticalmente per adattare l'altezza elemento di grandi dimensioni. Dalla riga 3 tutte le immagini sono come mostrato nell'immagine.

Come posso sbarazzarmi di questo?

Edit: Dopo alcune analisi

Così il problema sembra essere che l'immagine di grandi dimensioni sta prendendo due campate in senso orizzontale, ma campata unica in verticale e da quando ho forzato il mio ImageView ad essere quadrata, sembra che esso ha anche preso due file dove come infatti è una singola riga. Per questo motivo la seconda immagine sembra allungata.

Quindi ora la mia domanda è, come rendere l'elemento della griglia prendere due span in verticale e due span in orizzontale?

+0

Avete trovato una soluzione per questo? – rule

+0

[StaggeredGridLayoutManager] (http://developer.android.com/reference/android/support/v7/widget/StaggeredGridLayoutManager.html) è il più vicino che ho trovato. – rockfight

risposta

3

tenta di utilizzare StaggeredGridLayoutManager invece di GridLayoutManager. StaggeredGridLayoutManager supporta il layout verticale orizzontale & e la possibilità di impaginare i bambini al contrario. onBindViewHolder modalità di adattatore è possibile impostare campata in base alla posizione del vostro articolo utilizzando questo codice

final ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();  
if (position == 0) { 
       StaggeredGridLayoutManager.LayoutParams sglp = (StaggeredGridLayoutManager.LayoutParams) lp; 
       sglp.setFullSpan(true); 
       holder.itemView.setLayoutParams(sglp); 
      } 

trovare l'esempio http://enoent.fr/blog/2015/01/18/recyclerview-basics/ ... spero che vi aiuterà a

+0

Il collegamento è molto utile per comprendere 'RecyclerView'. Grazie – Kushal

+1

Ben prima di tutto GridLayoutManager supporta anche il layout orizzontale e verticale e la possibilità di impaginare i bambini al contrario. Il tuo codice farà sì che la vista si estenda su tutta la larghezza a causa di setFullSpan (true). Quello che voglio è fare in modo che la prima immagine si estenda al doppio della dimensione degli altri oggetti, cioè due span verticalmente e due orizzontalmente. Raccomando anche il link per capire il recyclerview, è molto utile. – rockfight

-1

Prova seguente codice nella classe GridViewAdapter

public class GridViewAdapter extends BaseAdapter { 
private Context context; 
private ArrayList<Integer> imageArrayList = new ArrayList<>(); 
private int type; 

public GridViewAdapter(Context context, ArrayList<Integer> imageArrayList) { 
    this.context = context; 
    this.imageArrayList = imageArrayList; 
} 

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

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

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

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder viewHolder = new ViewHolder(); 
    if(convertView==null){ 
     LayoutInflater inflater = LayoutInflater.from(context); 
     type = getItemViewType(position); 
     if(type==0) { 
      convertView = inflater.inflate(R.layout.big_layout,parent,false); 
     }else { 
      convertView = inflater.inflate(R.layout.small_layout, parent, false); 
     } 
     viewHolder.imageView = convertView.findViewById(R.id.imageView); 
     convertView.setTag(viewHolder); 
    }else{ 
     viewHolder = (ViewHolder) convertView.getTag(); 
    } 
     viewHolder.imageView.setImageDrawable(context.getResources().getDrawable(imageArrayList.get(position))); 
    return convertView; 
} 

@Override 
public int getViewTypeCount() { 
    return super.getViewTypeCount(); 
} 

@Override 
public int getItemViewType(int position) { 
    if(position==0) { 
     return 0; 
    }else{ 
     return 1; 
    } 
} 

    private class ViewHolder{ 
     ImageView imageView; 
    } 
} 
+0

Non penso che funzionerà dato che sto usando RecyclerView e GridLayoutManager invece di GridView. – rockfight

Problemi correlati