如何在android服装中实现手势识别

时间:2014-12-17 11:19:04

标签: java android wear-os

你好我正在寻找如何在android中检测手势,在android中我使用了一些这样的代码,但是在android中没有用..有没有办法覆盖默认的手势动作或只是识别它们?

我就像谷歌开发者一样: https://www.youtube.com/watch?v=naf_WbtFAlY http://youtu.be/sha_w3_5c2c?t=25m1s 模拟器有问题吗? (我使用的是32位模拟器:emulator -avd AndroidWearXC -force-32bit

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.GestureDetector;
import android.view.MotionEvent;


public class MainActivity extends Activity {
    private GestureDetector mDetector;

    private static String DEBUG_TAG="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        mDetector = new GestureDetector(this, new GestureDetector.SimpleOnGestureListener() {

            @Override
            public void onLongPress(MotionEvent event) {

                Log.d(DEBUG_TAG, " onLongPress: " + event.toString());
            }

            @Override
            public boolean onDown(MotionEvent event) {
                Log.d(DEBUG_TAG," onDown: " + event.toString());
                return true;
            }

            @Override
            public boolean onFling(MotionEvent event1, MotionEvent event2,
                                   float velocityX, float velocityY) {
                Log.d(DEBUG_TAG, " onFling: " + event1.toString()+event2.toString());
                return true;
            }

            @Override
            public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                                    float distanceY) {
                Log.d(DEBUG_TAG, " onScroll: " + e1.toString()+e2.toString());
                return true;
            }

            @Override
            public void onShowPress(MotionEvent event) {
                Log.d(DEBUG_TAG, " onShowPress: " + event.toString());
            }

            @Override
            public boolean onSingleTapUp(MotionEvent event) {
                Log.d(DEBUG_TAG, " onSingleTapUp: " + event.toString());
                return true;
            }

            @Override
            public boolean onDoubleTap(MotionEvent event) {
                Log.d(DEBUG_TAG, " onDoubleTap: " + event.toString());
                return true;
            }

            @Override
            public boolean onDoubleTapEvent(MotionEvent event) {
                Log.d(DEBUG_TAG, " onDoubleTapEvent: " + event.toString());
                return true;
            }

            @Override
            public boolean onSingleTapConfirmed(MotionEvent event) {
                Log.d(DEBUG_TAG, " onSingleTapConfirmed: " + event.toString());
                return true;
            }
        });

    }
    @Override
    public boolean onTouchEvent(MotionEvent ev) {
        return mDetector.onTouchEvent(ev)  || super.onTouchEvent(ev);
    }


}

我想要左右滑动,然后滚动upp和down手势: enter image description here

解决!检查我的答案..

2 个答案:

答案 0 :(得分:8)

一天后我开始工作,丢失的部分是我必须禁用Swipe-To-Dismiss Gesture并将DismissOverlayView添加到我的布局,步骤:

  1. 禁用“滑动到解除”手势 将AppTheme样式添加到styles.xml并在mainfest中将其用作app风格
  2. styles.xml:

        <style name="AppTheme" parent="Theme.DeviceDefault">
        <item name="android:windowSwipeToDismiss">false</item>
        </style>
    

    的AndroidManifest.xml:

        <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
    
    1. 将DissmissOverlayView添加到主布局

          <android.support.wearable.view.DismissOverlayView 
          android:id="@+id/dismiss_overlay"
          android:layout_height="match_parent"
          android:layout_width="match_parent"/>
      
    2. 在此类活动中使用它来获取手势

          public class WearActivity extends Activity {
          private DismissOverlayView mDismissOverlay;
          private GestureDetector mDetector;
      
          public void onCreate(Bundle savedState) {
              super.onCreate(savedState);
              setContentView(R.layout.wear_activity);
      
              // Obtain the DismissOverlayView element
              mDismissOverlay = (DismissOverlayView) findViewById(R.id.dismiss_overlay);
              mDismissOverlay.setIntroText(R.string.long_press_intro);
              mDismissOverlay.showIntroIfNecessary();
      
              // Configure a gesture detector
              mDetector = new GestureDetector(this, new SimpleOnGestureListener() {
      
              @Override
              public void onLongPress(MotionEvent event) {
      
                  Log.d(DEBUG_TAG, " onLongPress: " + event.toString());
              }
      
              @Override
              public boolean onDown(MotionEvent event) {
                  Log.d(DEBUG_TAG," onDown: " + event.toString());
                  return true;
              }
      
              @Override
              public boolean onFling(MotionEvent event1, MotionEvent event2,
                                     float velocityX, float velocityY) {
                  Log.d(DEBUG_TAG, " onFling: " + event1.toString()+event2.toString());
                  return true;
              }
      
              @Override
              public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
                                      float distanceY) {
                  Log.d(DEBUG_TAG, " onScroll: " + e1.toString()+e2.toString());
                  return true;
              }
      
              @Override
              public void onShowPress(MotionEvent event) {
                  Log.d(DEBUG_TAG, " onShowPress: " + event.toString());
              }
      
              @Override
              public boolean onSingleTapUp(MotionEvent event) {
                  Log.d(DEBUG_TAG, " onSingleTapUp: " + event.toString());
                  return true;
              }
      
              @Override
              public boolean onDoubleTap(MotionEvent event) {
                  Log.d(DEBUG_TAG, " onDoubleTap: " + event.toString());
                  return true;
              }
      
              @Override
              public boolean onDoubleTapEvent(MotionEvent event) {
                  Log.d(DEBUG_TAG, " onDoubleTapEvent: " + event.toString());
                  return true;
              }
      
              @Override
              public boolean onSingleTapConfirmed(MotionEvent event) {
                  Log.d(DEBUG_TAG, " onSingleTapConfirmed: " + event.toString());
                  return true;
              }
              });
          }
      
          // Capture long presses
          @Override
          public boolean onTouchEvent(MotionEvent ev) {
              return mDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
          } 
          }
      

答案 1 :(得分:0)

你检查过代码了吗?它工作正常。对于简单的操作,可以使用SimpleOnGestureListener来实现工作(它也适用于Android Wear):

    GestureDetector mDetector;
    mDetector = new GestureDetector(this, new SimpleOnGestureListener() {

        //http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
//For example:
                public void onLongPress(MotionEvent ev) {
                    //TODO handle your action
                }
            });

        @Override
        public boolean onTouchEvent(MotionEvent ev) {
            return mDetector.onTouchEvent(ev) || super.onTouchEvent(ev);
        }