16

ScrollView内に複数のHorizo​​ntalScrollViewがあります。水平スクロールはまったくスムーズではありません。スクロールを機能させるには、ほぼ完全に水平方向にスクロールする必要があります。これを微調整する簡単な修正はありますか?ありがとう!

単一のScrollView内の複数のHorizo​​ntalScrollView

4

6 に答える 6

8

スタッガードレイアウトマネージャーでリサイクラービューを使用できます

 StaggeredGridLayoutManager  staggeredGridLayoutManager = new StaggeredGridLayoutManager(4, StaggeredGridLayoutManager.HORIZONTAL);

 RecyclerViewAdapter recyclerViewAdapter = newRecyclerViewAdapter(this);

 recyclerView.setAdapter(recyclerViewAdapter); //Don't miss to initialize your adapter
于 2012-10-23T00:25:12.300 に答える
4

このクラスは、Horizo​​ntalScrollViewを1つのクラスに結合したScrollViewを作成します。AddChild()メソッドを使用してその中にものを入れることができます。dispatchTouchEvent overideはスクロールをスムーズに保つので、指を1回スライドさせるだけでパンできます。

(最近、これを使用して、プログラムで作成されたTextViewをラップしました)

class MultiScrollView extends ScrollView
{           
 public HorizontalScrollView hscroll;

 public MultiScrollView ( Context context ) 
 { 
   super( context );
 }

 public void AddChild( View child ) 
 {                                              
   hscroll.addView( child );
 }

 @Override
 public boolean dispatchTouchEvent( MotionEvent event ) 
 {
   hscroll.dispatchTouchEvent(event);
   onTouchEvent(event);
   return true;
 }
}
于 2012-10-15T11:48:54.153 に答える
2

( http://www.dev-smart.com/archives/34 )の水平スクロールビューソリューションを使用している場合、スクロールビューリストビューの間のクロスフォーカスの問題のソリューションは、スクロールビューへのフォーカスをブロックしています。リストビューにフォーカスしたら。

技術的な観点から、onScrollHorizo​​ntalListViewクラス内の関数に次の行を追加する必要があります。

getParent().requestDisallowInterceptTouchEvent(true);

お役に立てれば。

于 2013-05-08T13:55:00.720 に答える
1

私は解決策を見つけましたが、これがこれを正常に機能させるためにあなたがしなければならないことであるとはまだ信じられません!空白のonClickListenerをHorizo ​​ntalScrollViewの各アイテムに追加しました。

    item.setOnClickListener(new OnClickListener() {         
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
        }
    });

このスライドの後は、上向きと下向きの両方で非常にスムーズです。

于 2012-08-23T10:04:12.113 に答える
0

一般に、AndroidでネストされたScrollViewを使用するべきではありません。このようにスクロールする動作も、不自然です。

レイアウトデザインを再考することをお勧めしますが、拡張可能なリストでは実現できなかったものはありますか?

于 2012-08-22T14:38:17.660 に答える
0

デビッドの答えは機能しますが、欠点があります。ScrollViewのMotionEventオブジェクトをHorizo​​ntalScrollView.onTouchEvent()に直接渡すため、Horizo​​ntalScrollViewまたはその子がイベント座標を取得しようとすると、ScrollViewに基づく間違った座標が取得されます。

私の解決策:

public class CustomScrollView extends ScrollView{

    /*************skip initialization*************/

    @Override
    public boolean onInterceptTouchEvent(MotionEvent e){
        //returning false means ScrollView is not interested at any events,
        //so ScrollView's onTouchEvent() won't be called,
        //and all of the events will be passed to ScrollView's child
        return false;
    }

    @Override
    public boolean dispatchTouchEvent(MotionEvent ev) {
        //manually call ScrollView's onTouchEvent(),
        //the vertical scrolling happens there.
        onTouchEvent(ev);
        //dispatch the event,
        //ScrollView's child will have every event.
        return super.dispatchTouchEvent(ev);
    }
}

このCustomScrollViewをレイアウトファイルのHorizo​​ntalScrollViewにラップするだけです。

于 2017-04-13T11:43:06.817 に答える