在我的一个安卓应用程序中,我正在使用自定义图库在图库中显示图像。(我正在使用自定义图库,以便在交换图库时一次显示 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 .
请帮忙.
提前谢谢。
我也有同样的零星问题。传递给重写onFling
方法的两个MotionEvent
参数有时为 null,调用 e2.getX()
会引发异常。您可以通过像这样启动 onFling 方法来解决此问题:
if (e1 == null || e2 == null) return false;
我只在 ICS4.0 上遇到了同样的问题 - 当用户单击Gallery
上的项目时,我的Gallery
View
是在TabHost
内打开一个Activity
- 它总是给出NullPointerException
但仅在 ICS4 上 - 我最终做了以下事情:
//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 上。