在2个手指滑动ANDROID上启动应用程序

时间:2015-03-04 13:21:35

标签: java android gesture

我有这个代码,不会返回任何错误。然而,它并没有像它应该的那样工作。当我用两根手指向上滑动时,我试图启动一个应用程序,但什么也没发生。任何人都可以看到我的代码有什么问题吗?

public class HomeActivity extends Activity {

    ImageButton phoneButton;
    ImageButton contactsButton;
    ImageButton messagesButton;
    ImageButton cameraButton;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_home);

        setTitle("Apps");


        loadApps();
        loadListView();
        addClickListener();
        addphoneButtonListener();
        addmessagesButtonListener();
        addcontactsButtonListener();
        addcameraButtonListener();


//Two-Finger Drag Gesture detection
        RelativeLayout TextLoggerLayout = (RelativeLayout)findViewById(R.id.mainLayout);
        TextLoggerLayout.setOnTouchListener(
                new RelativeLayout.OnTouchListener(){

                    @Override
                    public boolean onTouch(View v, MotionEvent m) {
                        handleTouch(m);

                        return true;
                    }

                });



    }
    void handleTouch(MotionEvent m){
        //Number of touches
        int pointerCount = m.getPointerCount();
        if(pointerCount == 2){
            int action = m.getActionMasked();

            switch (action)
            {
                case MotionEvent.ACTION_DOWN:
                    Intent i;
                    PackageManager manager = getPackageManager();
                    try {
                        i = manager.getLaunchIntentForPackage("com.google.android.googlequicksearchbox");
                        if (i == null)
                            throw new PackageManager.NameNotFoundException();
                        i.addCategory(Intent.CATEGORY_LAUNCHER);
                        startActivity(i);
                    } catch (PackageManager.NameNotFoundException e) {

                    }
                    break;
                case MotionEvent.ACTION_UP:

                    break;
                case MotionEvent.ACTION_MOVE:

                    break;
                case MotionEvent.ACTION_POINTER_DOWN:

                    break;


            }


        }
        else {
           //do something
        }
    }

2 个答案:

答案 0 :(得分:1)

尝试调试handleTouch()以确切了解其未触发的原因。我的猜测是因为你对MotionEvent.ACTION_DOWN进行了检查,在现实世界中,两个手指同时难以完全发生。

将支票移至MotionEvent.ACTION_MOVE(无论如何您想要滑动,而不是点按),然后重试。

答案 1 :(得分:0)

MotionEvent.ACTION_DOWN表示一根手指。 MotionEvent.ACTION_POINTER_DOWN表示次要触摸(例如,两个手指)。

将代码移至case MotionEvent.ACTION_POINTER_DOWN:应该可以解决您的问题。

Documentation