3

在我的一个 android 应用程序中,我使用自定义图库在图库中显示图像。(我正在使用自定义画廊以便在交换画廊时一次显示 1 个项目)

这是我用于自定义画廊的代码:

public class CustomGallery extends Gallery {

     public CustomGallery(Context context) {
            super(context); 
        }

        public CustomGallery(Context context, AttributeSet attrs) {
            super(context, attrs);
        }

        public CustomGallery(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }

    private boolean isScrollingLeft(MotionEvent e1, MotionEvent e2) {
        return e2.getX() > e1.getX();
    }

    @Override
    public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
            float velocityY) {
        int kEvent;
        if (isScrollingLeft(e1, e2)) { // Check if scrolling left
            kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
        } else { // Otherwise scrolling right
            kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
        }
        onKeyDown(kEvent, null);
        return true;

    }
}

上面的代码工作正常 2.2,2.3 等....但它在 ICS 4.0 中崩溃导致空指针异常 GestureDetector.onTouchEvent

请帮忙 。

提前致谢。

4

2 回答 2

1

我有同样的零星问题。MotionEvent传递给 override方法的两个参数onFling有时为 null,调用e2.getX()会引发异常。您可以通过像这样启动 onFling 方法来解决此问题:

if (e1 == null || e2 == null) return false;
于 2015-05-26T17:14:56.580 回答
0

我只在 ICS4.0 上遇到了同样的问题——我在用户点击一个项目时Gallery View打开了一个——它总是给但只在 ICS4 上——我最终做了以下事情:ActivityTabHostGalleryNullPointerException

//flag returned by onTouch event always false except when we are about to start activity
boolean flag = false;
//add a touch listener
myGallery.setOnTouchListener(new OnTouchListener() {
@Override
    public boolean onTouch(View v, MotionEvent event) {
        return flag;
    }
});

myGallery.setOnItemClickListener(new OnItemClickListener() {
    //handle clicks

    //set flag returned by touch listener to true
    flag = true;

    //now add logic to open up the activity
 }

异常现在已在 ICS4 上进行。

于 2012-07-19T12:41:59.453 回答