如何在ImageView上实现自定义手势?

问题描述:

我通过以下“标准”代码成功实现了活动级别的自定义手势。所以整个屏幕对手势“起反应”。如何在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(); 
      } 
     } 
    } 

} 

在你的XML文件中,GestureOverlayView大概占据了整个屏幕。如果您希望它仅对ImageView上的手势做出反应,则应该在ImageView之上设置GestureOverlayView

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

     <ImageView 
      // attributes of ImageView /> 

</android.gesture.GestureOverlayView> 

EDIT

onGesturePerformedListener接收在其上的方法onGesturePerformed(GestureOverlayView, Gesture)进行了手势的GestureOverlayView

在此方法中,检查使用了哪个GestureOverlayView,并执行相关操作。

所以你应该在你想跟踪手势的每个ImageView上设置一个不同的GestureOverlayView

@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,它的工作!不过,我想我没有用这个自定义手势来解释我的整个目标:我的布局中有几个图像,手势将用于选择一个图像:因此,我想知道用户在哪个图像上执行了手势。你认为这是可能的吗?谢谢 – 2014-11-08 14:17:21

+0

@ user337186​​2我已经更新了我的答案。 – Robbe 2014-11-08 17:34:19