2016-05-08 2 views
1

Как вы можете видеть на этом image, у меня есть серая область, где есть некоторое изображение. Эта область - LinearLayout внутри горизонтальной прокрутки. Кроме того, на каждом изображении есть OnTouchListener, который начинает перетаскивание, когда есть ACTION_DOWN.Конфликт между моим 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; 
    } 
}; 

Я не думаю, что мой ява код полезен, так что я не ставил его (для того, чтобы иметь четкое вопрос), но не стесняйтесь спрашивать, думаете ли вы, что это может помочь.

спасибо!

+0

Добавить фрагмент кода из onTouch метода вашего ImageView в –

+0

Спасибо вам помочь! Я редактировал свой пост с кодом. – ValentinLoricourt

+0

Я создал подобный случай, и я могу прокручивать без проблем! –

ответ

1

Вам нужно провести различие между вертикальным и горизонтальным проводом.

Try следующим образом:

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

Смежные вопросы