0

我想實現水平和垂直滾動的Recycler視圖在同一時間。我必須顯示一個8列的表,所以我打算實施水平和垂直滾動在同時。Android:水平和垂直滾動recyclerview

我試過Horizo​​ntalScrollView在列表行中,但它是在一行中水平滾動。 我也試過Horizo​​ntalScrollViewrecyclerview的父母,但它不工作

list_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:focusable="true" 
android:paddingLeft="16dp" 
android:paddingRight="16dp" 
android:paddingTop="10dp" 
android:paddingBottom="10dp" 
android:clickable="true" 
android:background="?android:attr/selectableItemBackground" 
android:orientation="vertical"> 


<TextView 
    android:id="@+id/title" 
    android:textColor="@color/title" 
    android:textStyle="bold" 
    android:layout_alignParentTop="true" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 

    android:text="aaa"/> 

<TextView 
    android:layout_toRightOf="@+id/title" 
    android:id="@+id/genre" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_marginLeft="20dp" 
    android:text="bbb"/> 

<TextView 
    android:layout_toRightOf="@+id/genre" 
    android:id="@+id/year" 
    android:textColor="@color/year" 
    android:layout_width="wrap_content" 
    android:layout_alignParentRight="true" 
    android:layout_marginLeft="20dp" 
    android:layout_height="wrap_content" 
    android:text="ccc"/> 

</RelativeLayout> 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:orientation="horizontal" > 
<HorizontalScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:fillViewport="true" > 
<LinearLayout 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 
<android.support.v7.widget.RecyclerView 
    android:id="@+id/recycler_view" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"/> 
</LinearLayout> 
</HorizontalScrollView> 
</LinearLayout> 

任何一個可以請告訴我一個想法。

回答

0

我發現迄今爲止在一個視圖上進行水平和垂直滾動的最佳解決方案是將其放入一個FrameLayout中。然後你的視圖必須實現OnTouch(你可以在你的活動中做到這一點),你只需要在觸摸指針移動時滾動它。

下面是一個例子: XML:

<FrameLayout 
android:id="@+id/TwoWaysScrollableContainer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:clipToPadding="false"> 
    <YourView 
     android:id="@+id/GridContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:clipToPadding="false" /> 
</FrameLayout> 

C#(我用xamarin,但Java不會有這麼多的differencies我認爲) :

public class MyActivity : Activity 
    { 
     private MyView _myView; //Can be GridView, relative layout or wathever 
     private float _startX, _startY,_prevDx, _prevDy, _dx,_dy; 
     protected override void OnCreate(Bundle bundle) 
     { 
      base.OnCreate(bundle); 
     _myView = FindViewById<MyView>(Resource.Id.GridContainer); 
     } 

     public bool OnTouch(View v, MotionEvent e) 
     { 
      switch (e.Action) 
      { 
       case MotionEventActions.Down: 
        { 

         mode = Mode.DRAG; 
         startX = e.GetX() - prevDx; 
         startY = e.GetY() - prevDy; 

         break; 
        } 
       case MotionEventActions.Move: 
        { 
         /* you also could add logic to prevent your view from scrolling out of you grid bounds*/ 
         if (mode == Mode.DRAG) 
         { 
          dx = startX - e.GetX(); 
          dy = startY - e.GetY(); 
          _myView.ScrollBy((int)(dx), (int)(dy)); 

          startX = e.GetX(); 
          startY = e.GetY(); 
         } 
         break; 
        } 
       case MotionEventActions.Up: 
        { 
         mode = Mode.NONE; 
         prevDx = dx; 
         prevDy = dy; 
         break; 
        } 
       } 
       return true; 
     } 
    } 

我知道這並未我不直接回答你的問題(我對回收商的看法不太瞭解),但我希望它能幫助你。我用它來做一個平鋪引擎,它非常好用。