2014-11-06 4 views
1

Мне удалось реализовать индивидуальный жест на уровне активности, используя следующий «стандартный» код. Таким образом, весь экран «реагирует» на жест.Как реализовать собственный жест в ImageView?

Однако я хотел бы иметь возможность обнаруживать мой собственный жест, когда это делается на определенном ImageView. Является ли это возможным?

Благодаря

public class DisplayMultiImageActivity extends Activity implements OnGesturePerformedListener { 

    GestureLibrary mLibrary; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_display_multiimage); 

     mLibrary = GestureLibraries.fromRawResource(this, R.raw.gestures); 
     if (!mLibrary.load()) { 
      finish(); 
     } 

     GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures); 
     gestures.addOnGesturePerformedListener(this); 

    } 

    @Override 
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { 
     ArrayList<Prediction> predictions = mLibrary.recognize(gesture); 
     if (predictions.size() > 0 && predictions.get(0).score > 1.0) { 
      String result = predictions.get(0).name; 

      if ("mycustomgesture".equalsIgnoreCase(result)) { 
       Toast.makeText(this, "Custom gesture detected!!", Toast.LENGTH_LONG).show(); 
      } 
     } 
    } 

} 

ответ

1

В вашей XML-файла, GestureOverlayView вероятно, занимает весь экран. Если вы хотите, чтобы он реагировал только на жесты на ImageView, вы должны установить GestureOverlayView над ImageView.

<android.gesture.GestureOverlayView 
     android:id="@+id/gestures" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 

     <ImageView 
      // attributes of ImageView /> 

</android.gesture.GestureOverlayView> 

РЕДАКТИРОВАТЬ

onGesturePerformedListener получает GestureOverlayView, на котором этот жест был выполнен в методе onGesturePerformed(GestureOverlayView, Gesture).

В этом методе проверьте, какой из GestureOverlayView был использован, и выполните соответствующее действие.

Таким образом, вы должны установить различный GestureOverlayView на каждом ImageView, на котором вы хотите отслеживать Жесты.

@Override 
    public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) { 
      switch(overlay.getId()) { 
      case (R.id.overlay1): 
       \\ DO SOMETHING WITH IMAGEVIEW 1 
       break; 
      case (R.id.overlay2): 
       \\ DO SOMETHING WITH IMAGEVIEW 2 
       break; 
      case (R.id.overlay3): 
       \\ DO SOMETHING WITH IMAGEVIEW 3 
       break; 
      default: 
       \\ 
      } 
    } 
+0

Здравствуйте, Robbe, спасибо за ваш anwser, он работает! Однако я думаю, что я не объяснил всю свою цель с помощью этого индивидуального жеста: у меня есть несколько изображений в макете, и жест будет использоваться для выбора одного из изображений: поэтому я хотел бы знать, на каком изображении пользователь имеет исполнил жест. Как вы думаете, это возможно? Спасибо –

+0

@ user3371862 Я обновил свой ответ. – Robbe

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