GestureOverlayView:在滑动时改变手势颜色

时间:2017-09-08 11:11:26

标签: java android user-interface colors gesture

我的布局中只有一个简单的MyGestureOverlayView extends GestureOverlayView;我希望当用户滑动并且GestureOverlayView识别出手势时,它不会改变颜色。我希望颜色只有在我调用overlay.setGestureColor(int color)时才会改变,但实际上这个方法会改变超级类识别时将有下一个手势的颜色,而不是在用户滑动时。 所以我的问题是:如何在用户执行手势时更改手势的颜色?

public class MyGestureOverlayView extends GestureOverlayView implements 
                               GestureOverlayView.OnGesturePerformedListener, 
                               GestureOverlayView.OnGestureListener {

private static final String TAG = MyGestureOverlayView.class.getName();

private GiocoActivity mContext;

private boolean mRecognized;

private GestureLibrary gestures;

public MyGestureOverlayView(Context context, AttributeSet attrs) {
    super(context, attrs);

    if (context instanceof GiocoActivity)

        mContext = (GiocoActivity) context;

    gestures = GestureLibraries.fromRawResource(mContext, R.raw.gesture);

    if (!gestures.load())
        mContext.finish();

    addOnGesturePerformedListener(this);
    addOnGestureListener(this);
}

@Override
public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
    ArrayList<Prediction> predictions = gestures.recognize(gesture);
    Log.d(TAG, "Gesture riconosciuta!");
    // Sorry for my English :)

    if (predictions.size() > 0 && predictions.get(0).score > 3.0) {

        overlay.setGestureColor(Color.GREEN);
        // The color doesn't change here, but it will change in the next gesture

        String action = predictions.get(0).name;

        mRecognized = true;

        Toast.makeText(mContext, action, Toast.LENGTH_SHORT).show();
    }
    else {
        overlay.setGestureColor(Color.RED);
        // The color doesn't change here, but it will change in the next gesture
        mRecognized = false;
    }

    Log.d(TAG, "Fine riconoscimento Gesture; esito: "+ mRecognized);
}

@Override
public void onGestureStarted(GestureOverlayView overlay, MotionEvent event) {
    Log.d(TAG, "Gesture iniziata!");

}

@Override
public void onGesture(GestureOverlayView overlay, MotionEvent event) {
    Log.d(TAG, "Gesture in corso!");
    if (mRecognized)  // Always false for the first gesture
        overlay.setGestureColor(Color.GREEN); // Same as before
    else
        overlay.setGestureColor(Color.RED);  // Same as before
}

@Override
public void onGestureEnded(GestureOverlayView overlay, MotionEvent event) {
    Log.d(TAG, "Gesture finita!");

}

@Override
public void onGestureCancelled(GestureOverlayView overlay, MotionEvent event) {
    Log.d(TAG, "Gesture cancellata!");

}
}

此外,回调方法onGesturePerformedonGestureEnded之后调用,因此onGesture()中的布尔mRecognized始终为false,因为我第一次执行手势以及何时识别在超级课程中,它将在任何情况下显示为红色(我的onGesturePerformedListener都认可或不认可)。 对不起,如果我很复杂,这是我的第一个问题,我发现只有一个类似的问题,但它没有答案。 谢谢你的时间。

0 个答案:

没有答案