2016-05-08 3 views
1

このimageからわかるように、私はいくつかの画像ビューがある灰色の領域を持っています。この領域は、水平スクロールビュー内のLinearLayoutです。さらに、各画像ビューには、ACTION_DOWNがあるときにドラッグアンドドロップを開始するOnTouchListenerがあります。私のAction_DOWNと私のScrollviewとの間の衝突

ご理解いただけるように、スクロールしようとすると問題が発生します。確かに、ACTION_DOWNは「選択」されているので、私はscrollできません。

だから私は考えているいくつかのソリューションは:

  • が高いエリアを配置すると、何もないところユーザーがスクロールすることができます。
  • OnTouchListener使用しますが、OnLongClickListener

しかし、これらのソリューションのどれも私のために良いありません。私は自分の問題をどのように解決できるか考えていますか?

私のXMLコード:

<HorizontalScrollView 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="0.1" 
    android:background="#5d6164" 
    android:id="@+id/horizontalScrollView" > 

    <LinearLayout 
     android:id="@+id/area2_timetable" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="horizontal" 
     android:gravity="center"> 
    </LinearLayout> 

</HorizontalScrollView> 

マイOnTouch方法:

View.OnTouchListener myOnTouchListener = new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) { 

     int action = event.getAction(); 
     if (action==MotionEvent.ACTION_DOWN) 
     { 
      SharedPreferences mSharedPrefs = getSharedPreferences("User", Context.MODE_PRIVATE); 
      if(mSharedPrefs.getInt("son_active", 0)==1) Son(VariablesManagement.nom_stockage_meal.get(v.getId())); 

      ClipData data = ClipData.newPlainText("", ""); 
      DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); 
      v.startDrag(data, shadowBuilder, v, 0); 
     } 
     return false; 
    } 
}; 

私は私のJavaコードが便利ですので、私は明確に持っているために、(それを入れていなかったとは思いませんあなたがそれが助けることができると思うかどうか尋ねることを躊躇しないでください。

ありがとうございました!

+0

助けるあなたをありがとう –

+0

あなたImageViewののonTouchメソッドのコードスニペットを追加します!私はコードを使って投稿を編集しました。 – ValentinLoricourt

+0

私は同様のケースを作成しましたが、問題なくスクロールできるようになりました! –

答えて

1

あなたは縦スワイプと横スワイプを区別する必要があります。

は、次のように試してみてください。

private float y1, y2; 

//Adjust this threshold as your need 
private static final int MIN_DISTANCE = 20; 

View.OnTouchListener myOnTouchListener = new View.OnTouchListener() { 

    public boolean onTouch(final View v, MotionEvent event) { 

     switch (event.getAction()) { 

      case MotionEvent.ACTION_DOWN: 

       y1 = event.getY(); 

       break; 

      case MotionEvent.ACTION_MOVE: 

       y2 = event.getY(); 

       float deltaY = y2 - y1; 

       if (Math.abs(deltaY) > MIN_DISTANCE) { 

        ClipData data = ClipData.newPlainText("", ""); 
        View.DragShadowBuilder shadowBuilder = new View.DragShadowBuilder(v); 
        v.startDrag(data, shadowBuilder, v, 0); 

        Toast.makeText(getActivity(), "Swiping vertically!", Toast.LENGTH_SHORT).show(); 

       } else { 

        // Nothing to do 
       } 

       break; 
     } 

     return false; 
    } 
}; 
+0

ありがとうございました! しかし、問題があります:私は "ACTION_DOWN"に行くが、決して "ACTION_MOVE"ではイメージビューは決して動かないので... – ValentinLoricourt

+0

ACTION_MOVEを得るためにあなたのイメージビューを移動する必要はない。あなたが触れるもの!一度試してみてください。 –

+0

いいえ、私は決して内部に行っていません... – ValentinLoricourt

関連する問題