分類:
版權聲明:本文爲博主原創文章,未經博主允許不得轉載。
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