2015-02-25 2 views
0

Мне удалось создать этот код для вставки или выключения кнопки в списке. Он работает нормально, если мой жест на экране телефона является горизонтальным. Но если мой жест также диагонален ... он не вызывает показ/скрытие кнопки. Жест горизонтальный (слева направо или справа налево), но он может быть немного диагональным. Что делать ?Android onTouch event

класс шоу реализует OnTouchListener {

@Override 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     int action = event.getAction(); 
     switch (action) 
     { 
      case MotionEvent.ACTION_DOWN: 
       action_down_x = (int) event.getX(); 
       break; 
      case MotionEvent.ACTION_MOVE: 
       action_up_x = (int) event.getX(); 
       difference = action_down_x - action_up_x; 
       break; 
      case MotionEvent.ACTION_UP: 
       if (difference < -30) 
       { 
        Animation slide_up = AnimationUtils.loadAnimation(mContext, R.anim.slide_stanga); 
        LinearLayout right = (LinearLayout) v.findViewById(R.id.dreapta); 
        if (right.isShown()) 
        { 
        right.startAnimation(slide_up); 
        right.setVisibility(View.GONE); 
        final View x = v; 
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() 
        { 
         public void run() 
         { 
          LinearLayout left = (LinearLayout) x.findViewById(R.id.stanga); 
          left.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT,(float) 4.0)); 
         } 
        }, 500); 

        } 

       } 
       if (difference > 30) 
       { 
        Animation slide_up = AnimationUtils.loadAnimation(mContext, R.anim.slide_dreapta); 
        LinearLayout right = (LinearLayout) v.findViewById(R.id.dreapta); 
        if (!right.isShown()) 
         { 
         LinearLayout left = (LinearLayout) v.findViewById(R.id.stanga); 
         left.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT,(float) 3.0)); 
         right.setLayoutParams(new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT,(float) 1.0)); 
         right.startAnimation(slide_up); 
         right.setVisibility(View.VISIBLE); 
         } 
       } 
       action_down_x = 0; 
       action_up_x = 0; 
       difference = 0; 
       break; 
      } 
      return true; 
    } 

}

Спасибо!

ответ

1

Для этого не существует встроенного варианта. Я думаю, вы должны использовать Gesture Detector. Получите начальную и конечную координаты экрана, а затем запрограммируйте его по-своему.

+0

ok. я попробую это. благодаря – Huliganul