最近用到了Gallery这个控件,我的adapter是这样写的:
public GalleryAdapter(Context mContext, List<String> mData) { this.mContext = mContext; this.mData = mData; } // 决定了item显示的个数 @Override public int getCount() { return mData.size(); } // 根据postition获取对应item的数据 @Override public Object getItem(int position) { return mData.get(position); } // 获取对应postition的item的ID @Override public long getItemId(int position) { return position; } // 创建对应的item的视图(View) @Override public View getView(final int position, View convertView, ViewGroup parent) { if (null == convertView) { convertView = new ImageView(mContext); convertView.setLayoutParams(new Gallery.LayoutParams(200, 400)); } // 设置image大小 ((ImageView) convertView).setScaleType(ImageView.ScaleType.FIT_CENTER); convertView.setPadding(5, 5, 5, 5); GliderManager.getGlide().load(mData.get(position), com.chad.library.R.drawable.abc_list_focused_holo, ((ImageView) convertView)); convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (null != mItemClickListener) mItemClickListener.onItemClick(v, position); } }); return convertView; } public void setOnItemClickListener(ESTOnItemClickListener listener) { mItemClickListener = listener; }
这么看看没什么问题(至少我感觉没什么问题),但是就是这样后居然滑动不了,后来看了看拦截事件的方法,Gallery没有重写这个方法,这个很是郁闷了,在网上找到了这个替代的方案,不使用onClickListener,使用onTouchListener然后return为false这样就成功的把事件传递到Gallery了改后是这样的
public GalleryAdapter(Context mContext, List<String> mData) { this.mContext = mContext; this.mData = mData; } // 决定了item显示的个数 @Override public int getCount() { return mData.size(); } // 根据postition获取对应item的数据 @Override public Object getItem(int position) { return mData.get(position); } // 获取对应postition的item的ID @Override public long getItemId(int position) { return position; } // 创建对应的item的视图(View) @Override public View getView(final int position, View convertView, ViewGroup parent) { if (null == convertView) { convertView = new ImageView(mContext); convertView.setLayoutParams(new Gallery.LayoutParams(200, 400)); } // 设置image大小 ((ImageView) convertView).setScaleType(ImageView.ScaleType.FIT_CENTER); convertView.setPadding(5, 5, 5, 5); GliderManager.getGlide().load(mData.get(position), com.chad.library.R.drawable.abc_list_focused_holo, ((ImageView) convertView)); convertView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { if (null != mItemClickListener) mItemClickListener.onItemClick(v, position); return false; } }); return convertView; } public void setOnItemClickListener(ESTOnItemClickListener listener) { mItemClickListener = listener; }