Cómo hacer la primera imagen más grande en Gridlayout?
Para ser precisos quiero lograr esto.
Estoy utilizando recyclerview con GridLayoutManager. También he hecho el primer artículo grande usando el código siguiente
- ViewHolder.getAdapterPosition () devuelve siempre -1
- Android RecyclerView con SectionIndexer
- Animación de transición de llamada desde RecyclerView Adapter en lugar de Actividad
- CardView layout_width = "match_parent" no coincide con el ancho de RecyclerView padre
- ¿Por qué ListView y RecyclerView son focusableInTouchMode?
lLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { @Override public int getSpanSize(int i) { if (i==0) return 2; else return 1; } });
Todo funciona bien, excepto uno: El elemento en la posición 1 (es decir, el siguiente elemento de la imagen grande) se alarga verticalmente para que coincida con la altura del elemento grande. Desde la fila 3 todas las imágenes son como se muestra en la imagen.
Cómo puedo deshacerme de esto ?
Editar: Después de algunos análisis
Así que el problema parece ser que la imagen grande está tomando dos tramos horizontalmente, pero un solo tramo verticalmente y ya que he forzado mi ImageView a ser cuadrado, parece que también ha tomado dos filas donde como de hecho es una sola fila. Debido a esta razón, la segunda imagen parece alargada.
Así que ahora mi pregunta es, ¿cómo hacer que el elemento de la cuadrícula tome dos vanos verticalmente y dos vanos horizontalmente?
- Obtener encabezados de sección para trabajar con SuperSLiM y RecyclerView
- Actualización parcial de RecyclerView.ViewHolder
- ¿Cómo manejar los contadores de cuenta regresiva múltiples en RecyclerView?
- Elementos compartidos que animan entre fragmentos
- Android: ¿Cómo obtener el actual desplazamiento X de RecyclerView?
- Ocultar barra de desplazamiento de RecyclerView
- Emitir refrescando una vista de una fila en recyclerview
- RecyclerView enfrenta pequeños problemas
Intente utilizar StaggeredGridLayoutManager en lugar de GridLayoutManager . StaggeredGridLayoutManager soporta la disposición horizontal y vertical, así como una capacidad de disposición de los niños en sentido inverso. OnBindViewHolder método de adaptador que puede establecer span según la posición de su elemento utilizando este código
final ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams(); if (position == 0) { StaggeredGridLayoutManager.LayoutParams sglp = (StaggeredGridLayoutManager.LayoutParams) lp; sglp.setFullSpan(true); holder.itemView.setLayoutParams(sglp); }
Encontrar el ejemplo http://enoent.fr/blog/2015/01/18/recyclerview-basics/ … espero que te ayude
Intente el código siguiente en la clase 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; } }
- E / SpannableStringBuilder (18909): SPAN_EXCLUSIVE_EXCLUSIVE vanos no pueden tener una longitud cero
- Android dalvik recogida de basura puede bloquearse?