8
ScrollViewタッチ処理内のHorizontalScrollView
画面全体がスクロール可能になるように、レイアウト全体を囲むScrollViewがあります。このScrollViewの最初の要素は、水平方向にスクロールできる機能を持つHorizontalScrollViewブロックです。タッチイベントを処理し、ACTION_UPイベントで最も近い画像にビューを「スナップ」させるために、ontouchlistenerをhorizontalscrollviewに追加しました。 だから私がしようとしている効果は、あなたが一方から他方へスクロールすることができ、指を離すと一つの画面にスナップする、ストックのアンドロイドのホームスクリーンのようなものです。 これは1つの問題を除いてすべてうまく機能します。ACTION_UPを登録するには、ほぼ完全に水平に左から右にスワイプする必要があります。少なくとも縦方向にスワイプすると(多くの人がスマートフォンを左右にスワイプするときにそうする傾向があると思います)、ACTION_UPではなくACTION_CANCELを受け取ります。これは、horizontalscrollviewがscrollview内にあり、scrollviewが垂直方向のタッチをハイジャックして垂直方向のスクロールを可能にしているためと考えられます。 スクロールビューのタッチイベントを水平スクロールビュー内からのみ無効にしながら、スクロールビューの別の場所で通常の垂直スクロールを許可するにはどうすればよいですか? これが私のコードのサンプルです: public class HomeFeatureLayout extends HorizontalScrollView { private ArrayList<ListItem> items = null; private GestureDetector gestureDetector; View.OnTouchListener gestureListener; private static final int SWIPE_MIN_DISTANCE = 5; private static final int SWIPE_THRESHOLD_VELOCITY = 300; private int activeFeature = 0; public HomeFeatureLayout(Context context, ArrayList<ListItem> items){ super(context); setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); setFadingEdgeLength(0); …