2017-02-14 6 views
0

Ich habe eine HorizontalScrollView in einem VerticalScrollView. Wenn ich horizontal scrolle, ist das Scrollen sanft. Aber wenn ich vertikal scrollen, ist die Bildlauf nicht glatt, es wird manchmal horizontal gescrollt. Wie macht man die vertikale Bildlauf glatt?HorizontalScrollView in einem ScrollView Android

Hier ist meine xml,

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.sasank.calendarview.MainActivity" 
    android:background="@android:color/white"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Hello World!" /> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="500dp" 
     android:layout_marginLeft="200dp" 
     android:layout_alignParentBottom="true" 
     android:layout_marginBottom="20dp"> 
     <ScrollView 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:scrollbars="vertical"> 
      <RelativeLayout 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
       <android.support.v7.widget.RecyclerView 
        android:id="@+id/chapter_list" 
        android:layout_width="150dp" 
        android:layout_height="match_parent"> 

       </android.support.v7.widget.RecyclerView> 

       <HorizontalScrollView 
        android:id="@+id/horizontal_scroll" 
        android:layout_width="match_parent" 
        android:layout_height="match_parent" 
        android:layout_toRightOf="@id/chapter_list" 
        android:scrollbars="horizontal"> 
        <android.support.v7.widget.RecyclerView 
         android:id="@+id/calendar" 
         android:layout_width="wrap_content" 
         android:layout_height="match_parent"> 

        </android.support.v7.widget.RecyclerView> 
       </HorizontalScrollView> 

      </RelativeLayout> 
     </ScrollView> 

    </RelativeLayout> 
</RelativeLayout> 

Im einen Vertical LinearLayoutManager für Chapter_list Recyclerview und GridLayoutManager für Kalender RecyclerView

+0

nicht sicher, ob es noch festgelegt wurde, aber Verschachtelung der Scroll der wird nicht unterstützt oder empfohlen. Aus diesem Grund musste ich einen benutzerdefinierten Kalender erstellen. – samosaris

Antwort

2
android:nestedScrollingEnabled="true" 

Sie können dies versuchen, aber immer noch mit dem verschachtelten Scrollen Probleme im Zusammenhang mit und usw. sind eigentlich üblich. Leute haben die gleichen Probleme hier auf StackOverflow gehabt, werfen Sie einen Blick, ich hoffe, dass es Ihnen helfen kann: Problems with Nested Scrolling

+0

Versucht es, aber es hat nicht funktioniert –

0

Ich habe vertikale scrollview und horizontale recycleview Fotogalerie in einem meiner Projekte und es funktioniert gut. Hier ist der Code:

Fragment/Aktivität Layout:

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    > 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     ... 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/horizontal_recycler_view" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="15dp" 
     android:layout_marginBottom="15dp" 
     android:layout_marginLeft="5dp" 
     android:layout_marginRight="5dp" 
     android:horizontalSpacing="10dp" 
     android:isScrollContainer="false" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" 
     /> 
      ... 

     </LinearLayout> 
</ScrollView> 

Artikel:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ImageView 
    android:id="@+id/horizontal_item_view_image" 
    android:layout_marginRight="10dp" 
    android:layout_width="109dp" 
    android:layout_height="109dp" /> 

</LinearLayout> 

Adapter:

public class HorizontalPhotosAdapter extends RecyclerView.Adapter<HorizontalPhotosAdapter.MyViewHolder> { 

    private Context context; 
    private LayoutInflater inflater; 
    private ArrayList<Bitmap> bitmapList; 

    public class MyViewHolder extends RecyclerView.ViewHolder { 

     private ImageView riv; 

     public MyViewHolder(View view) { 
      super(view); 

      riv = (ImageView) view.findViewById(R.id.horizontal_item_view_image); 

     } 
    } 


    public HorizontalPhotosAdapter(Context context, ArrayList<Bitmap> bitmapList, String[] imageUrls) { 
     this.context = context; 
     this.bitmapList = bitmapList; 
    } 

    @Override 
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal_item_view, parent, false); 

     if (itemView.getLayoutParams().width == RecyclerView.LayoutParams.MATCH_PARENT) 
      itemView.getLayoutParams().width = RecyclerView.LayoutParams.WRAP_CONTENT; 

     return new MyViewHolder(itemView); 
    } 

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

     holder.riv.setImageBitmap(bitmapList.get(position)); 

    } 


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

Implementierung in Fragmente/Aktivität:

  horizontalAdapter=new HorizontalPhotosAdapter(getContext(), bitmapList); 
      horizontal_recycler_view.setAdapter(horizontalAdapter); 
      horizontalAdapter.notifyDataSetChanged(); 

      LinearLayoutManager horizontalLayoutManagaer = new LinearLayoutManager(getContext(), LinearLayoutManager.HORIZONTAL, false); 
      horizontal_recycler_view.setLayoutManager(horizontalLayoutManagaer); 
      horizontal_recycler_view.setAdapter(horizontalAdapter);