Android 系统自带Gallery选中Item默认是居中显示,这样有时候左边空出一大块,非常不美观,网上已有不少人解决了这个问题,比如这篇blog中提到的方法 http://blog.csdn.net/luinsist/article/details/8205638,这样有个问题是每次点击item都会滑动到最左边,如果要跳转界面的话会觉得有点迟钝,能不能让它不要滑动?下面这位仁兄给出了不要滑动到中间的方法 http://blog.csdn.net/sevensundark/article/details/7419305, 本人试验后好像效果不太好。下面说下我的解决办法,其实很简单,通过反射在onSingleTapUp方法中拿到当前的mDownTouchPosition,然后直接回调给界面,不要掉父类的onSingleTapUp方法。主要代码如下:
public void setOnItemClickListener(IOnItemClickListener listener) {
mListener = listener;
}
@Override
public boolean onSingleTapUp(MotionEvent e) {
Log.i(TAG, "onSingleTapUp----------------------");
try {
Field f = AlignLeftGallery.class.getSuperclass().getDeclaredField("mDownTouchPosition");
f.setAccessible(true);
int position = f.getInt(this);
Log.i(TAG, "mDownTouchPosition = " + position);
if(null != mListener && position >= 0) {
mListener.onItemClick(position);
}
} catch (SecurityException e1) {
e1.printStackTrace();
} catch (NoSuchFieldException e1) {
e1.printStackTrace();
} catch (IllegalArgumentException e2) {
e2.printStackTrace();
} catch (IllegalAccessException e3) {
e3.printStackTrace();
}
return false;
}
IOnItemClickListener 是自定义的回调接口。
public interface IOnItemClickListener {
public void onItemClick(int position);
}
在Activity 中处理点击事件。
mGallery.setOnItemClickListener(new AlignLeftGallery.IOnItemClickListener() {
@Override
public void onItemClick(int position) {
Toast.makeText(AlignLeftGalleryActivity.this, position + " click!", Toast.LENGTH_SHORT).show();
}
});
这样基本满足了需求:)
附demo下载地址:http://download.csdn.net/detail/luozhongzhu/4888103