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