2016-02-03 21 views
6

Ich erstelle eine horizontale RecyclerView in meiner App.
Es müssen 2 Bilder gleichzeitig auf dem Bildschirm angezeigt werden (die Breite jedes Bildes muss also 50% des Bildschirms betragen).
Für jetzt funktioniert es gut, aber jeder Artikel umfasst die gesamte Breite des Bildschirms.RecyclerView Anzahl der sichtbaren Elemente

Hier ist mein Code

mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler_main_ads); 
     LinearLayoutManager mLinearLayoutManager = new LinearLayoutManager(getActivity()); 
     mLinearLayoutManager.setOrientation(LinearLayoutManager.HORIZONTAL); 
     mRecyclerView.setLayoutManager(mLinearLayoutManager); 
     RecyclerViewAdapter adapter = new RecyclerViewAdapter(tmp, R.layout.lv_main_screen); 
     mRecyclerView.setAdapter(adapter); 

Hier ist das Layout eines Artikels

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:orientation="horizontal" 
       android:weightSum="1"> 

    <ImageView 
     android:id="@+id/iv_main_ad" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="0.5" 
     android:scaleType="fitXY" 
     android:src="@drawable/baner_gasoline" 
     /> 

</LinearLayout> 

Wie man sehen kann ich versuchte Layout_gravity = "0.5" zu verwenden, Aber es hilft nicht.

Ich habe versucht, layout_width = ... dp angeben, aber ich kann nicht genau die Hälfte des Bildschirms bekommen.

die ich denke ein anderes Image in Artikel Layout hinzufügen, aber in diesem Fall muss ich Probleme mit dem Adapter, weil ich eingekreisten (unendlich) horizontal Listenansicht

hier ist mein Adapter implemnt wollen:

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyHolder> { 

    private List<Integer> mImages; 
    private int itemLayout; 

    public RecyclerViewAdapter(ArrayList<Integer> imageResourceIds, int itemLayout) { 
     this.mImages = imageResourceIds; 
     this.itemLayout = itemLayout; 
    } 


    @Override 
    public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { 

     View v = LayoutInflater.from(parent.getContext()).inflate(itemLayout, parent, false); 
     return new MyHolder(v); 

    } 

    @Override 
    public void onBindViewHolder(MyHolder holder, int position) { 

     holder.adIv.setImageResource(mImages.get(position)); 

    } 

    @Override 
    public int getItemCount() { 
     return mImages.size(); 
    } 

    public static class MyHolder extends RecyclerView.ViewHolder { 
     protected ImageView adIv; 

     private MyHolder(View v) { 
      super(v); 
      this.adIv = (ImageView) v.findViewById(R.id.iv_main_ad); 
     } 
    } 
} 
+0

"jeder Artikel enthält die gesamte Breite des Bildschirms". "Hier ist Layout eines Artikels" -> 'android: layout_width =" match_parent "' –

+0

Berechnen Sie die Breite des Bildschirms und legen Sie die maximale Anzahl Element, das Sie überprüfen möchten ans –

+0

@Pedro Oliveira, versuchte ich Wrap_Content, aber es ändert nichts – Androider

Antwort

6

Für Sie müssen die Breite des Bildschirms berechnen und die Breite dynamisch unten gesetzt ist mein Code

in Ihrem ViewHolder initilisation

unten Code hinzufügen
llImg = (LinearLayout) itemView.findViewById(R.id.llImg); 

      llImg.getLayoutParams().width = (int) (Utils.getScreenWidth(itemView.getContext())/2); 
      llImg.getLayoutParams().height = (int) (Utils.getScreenWidth(itemView.getContext())/2); 

      imgView = (ImageView) itemView.findViewById(R.id.imgView); 

Die Layout-Datei ist hier

<LinearLayout 
     android:id="@+id/llImg" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:gravity="center"> 

     <ImageView 
      android:id="@+id/imgView" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      /> 
    </LinearLayout> 

ein Utils.java Make

public static int getScreenWidth(Context context) { 

     if (screenWidth == 0) { 
      WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
      Display display = wm.getDefaultDisplay(); 
      Point size = new Point(); 
      display.getSize(size); 
      screenWidth = size.x; 
     } 
     return screenWidth; 
    } 

Hoffnung das wird Ihnen helfen!

+0

danke. Was meinst du mit Utlen? – Androider

+0

Überprüfen Sie, es gibt eine Methode, die ich hinzugefügt habe, jetzt überprüfen –

+0

Ich bemerkte ein Problem mit diesem. Wenn ich Bilder scrolle, scrolle ich sie wie ein langes Bild. Wenn ich mit dem Scrollen aufhöre - es hört überall auf und kann teilweise 3 Bilder zeigen. Aber wenn ich mit dem Scrollen aufhöre sollten nur zwei angezeigt werden, also müssen Bilder an die Ränder angepasst werden (wie hapened mit der Anfangslösung die ich gepostet habe. Wenn ich diese Vorgabe einstelle - immer wird ein Bild angezeigt) – Androider

Verwandte Themen