手势识别一直报空指针

发布于 2022-09-04 04:18:51 字数 3051 浏览 27 评论 0

在滑动的时候就会报出空指针异常。

代码

package com.young.safeprogremm;

import android.os.Bundle;
import android.os.PersistableBundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;

import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.GestureDetector.SimpleOnGestureListener;


/**
 * Created by ASUS on 2016/11/16.
 * <p>
 * 将每个界面的上一步下一步按钮抽取到父类中
 */


public abstract class SetUpBaseActivity extends AppCompatActivity {
    private GestureDetector gestureDetector; //= new GestureDetector(this, new MyOnGestureListener());

    @Override
    public void onCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
        super.onCreate(savedInstanceState);
        //获取手势识别器
        //要想手势识别器生效,必须把手势识别器注册到
        gestureDetector = new GestureDetector(this, new MyOnGestureListener());
    }

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        gestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);
    }

    private class MyOnGestureListener extends SimpleOnGestureListener {
        @Override
        public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
            float startX = e1.getRawX();//得到按下的坐标
            float endX = e2.getRawX();//得到抬起的坐标
            if ((startX - endX) > 10) {
                //下一步
                next_activity();
            } else if ((endX - startX) > 10) {
                //上一步
                pre_activity();
            }
            return true;
        }
        // return super.onFling(e1, e2, velocityX, velocityY);
    }
    
    public void pre(View view) {
        pre_activity();
    }

    public void next(View view) {
        next_activity();
    }

    //因为父类不知道子类的上一步,下一步具体的执行代码,所以要创建一个抽象类,让子类实现这个抽象类,根据自己的特新去事项
    public abstract void next_activity();

    public abstract void pre_activity();

    //在父类中直接对子类中的返回键进行统一的处理

    @Override
    public void onBackPressed() {
        super.onBackPressed();
    }

    /**
     * 监听手机物理按键的事件
     *
     * @param keyCode 物理按键的标示
     * @param event   按键的处理事件
     */
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            //判断keycode是否返回键的标示 true是可以屏蔽按键的,home键是无法屏蔽的。
            //return true;
            pre_activity();
        }
        return super.onKeyDown(keyCode, event);
    }
}

异常信息

E/InputEventReceiver: Exception dispatching input event.
E/MessageQueue-JNI: Exception in MessageQueue callback: handleReceiveCallback
E/MessageQueue-JNI: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.view.GestureDetector.onTouchEvent(android.view.MotionEvent)' on a null object reference
                        at com.young.safeprogremm.SetUpBaseActivity.onTouchEvent(SetUpBaseActivity.java:35)
                        

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文