首先在布局文件搭好布局
<android.support.v4.view.ViewPager android:id="@+id/vp" android:layout_width="match_parent" android:layout_height="200dp"/> <com.******.****.view.CircleIndicator android:id="@+id/indicator" android:layout_width="match_parent" android:layout_height="20dp" android:layout_below="@+id/vp" > </com.****.****.view.CircleIndicator>
private int pageCount; //界面页数 private int pageSize = 8; //每页item个数 private int curIndex = 0;//当前是第几页 private List<Model> lists;//模型数据源
private View parentView;//需要弹出的Viewprivate LayoutInflater inflater;private ViewPager vpg;private List<View> mPagerList;private CircleIndicator mCircleIndicator; 初始化相应属性
private void initGiftsView() { mPagerList = new ArrayList<View>(); parentView = LayoutInflater.from(WatchLiveActivity.this).inflate(R.layout.layout_name, null); Window = new PopupWindow(parentView,WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.WRAP_CONTENT,true); Window.setFocusable(true); // 设置popWindow的显示和消失动画 Window.setAnimationStyle(R.style.popwindow_anim_up_down_style); Window.setOutsideTouchable(false); //这句是为了防止弹出菜单获取焦点之后,点击activity的其他组件没有响应 Window.setBackgroundDrawable(new BitmapDrawable()); vpg = (ViewPager) bottomGiftView.findViewById(R.id.vp); mCircleIndicator = (CircleIndicator) bottomGiftView.findViewById(R.id.indicator); vpg.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { curIndex = position; } @Override public void onPageScrollStateChanged(int state) { } }); }
//总的页数=总数/每页数量,并取整
if(mGiftLists == null){mGiftLists = 相应数据绑定操作; //总的页数=总数/每页数量,并取整 pageCount = (int) Math.ceil(mGiftLists.size() * 1.0 / pageSize); for (int i = 0; i < pageCount; i++) { //每个页面都是inflate出一个新实例 GridView gridView = (GridView) inflater.inflate(R.layout.gridview, vpg, false); final GridViewAdapter gridViewAdapter = new GridViewAdapter(this, mGiftLists, i, pageSize); gridView.setAdapter(gridViewAdapter); mPagerList.add(gridView); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int pos = position + curIndex * pageSize; //TODO 添加相应监听,做出相应处理
//标记选中item、改变item背景 gridViewAdapter.setSeclection(pos); gridViewAdapter.notifyDataSetChanged(); } }); } //设置适配器 vpg.setAdapter(new ViewPagerAdapter(mPagerList)); mCircleIndicator.setViewPager(vpg);}else { showGifts();}
GridViewAdapter:
public class GridViewAdapter extends BaseAdapter{ private List<Model> mDatas; private LayoutInflater inflater; private Context mContext; /** * 页数下标,从0开始(当前是第几页) */ private int curIndex; /** * 每一页显示的个数 */ private int pageSize; private String path; private int checkedItem = -1;
/** * 记录选中itemposition */public void setSeclection(int position) { checkedItem = position; } public GridViewAdapter(Context context, List<Model> mDatas, int curIndex, int pageSize) { inflater = LayoutInflater.from(context); this.mContext = context; this.mDatas = mDatas; this.curIndex = curIndex; this.pageSize = pageSize; } /** * 先判断数据集的大小是否足够显示满本页?mDatas.size() > (curIndex+1)*pageSize, * 如果够,则直接返回每一页显示的最大条目个数pageSize, * 如果不够,则有几项返回几,(mDatas.size() - curIndex * pageSize);(也就是最后一页的时候就显示剩余item) */ @Override public int getCount() { return mDatas.size() > (curIndex + 1) * pageSize ? pageSize : (mDatas.size() - curIndex * pageSize); } @Override public Object getItem(int position) { return mDatas.get(position + curIndex * pageSize); } @Override public long getItemId(int position) { return position + curIndex * pageSize; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder = null; if (convertView == null) { convertView = inflater.inflate(R.layout.item_gridview, parent, false); viewHolder = new ViewHolder(); viewHolder.your_item_view = (TextView) convertView.findViewById(R.id.item_gridview_view's id); viewHolder.bgLayout = (LinearLayout) convertView.findViewById(R.id.item_gridview_gifts_ll); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } /** * 在给View绑定显示的数据时,计算正确的position = position + curIndex * pageSize, */ int pos = position + curIndex * pageSize; viewHolder.****.setText(mDatas.get(pos).****);
//如果checkedItem == pos 表示pos位置item被选中 if(checkedItem == pos){ viewHolder.bgLayout.setBackgroundResource(R.drawable.*******selected); }else{
viewHolder.bgLayout.setBackgroundResource(R.drawable.******normal);} return convertView; } class ViewHolder { public LinearLayout bgLayout; public TextView *****view; }}
ViewPagetAdapter:
public class GiftViewPagerAdapter extends PagerAdapter { private List<View> mViewList; public GiftViewPagerAdapter(List<View> mViewList) { this.mViewList = mViewList; } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView(mViewList.get(position)); } @Override public Object instantiateItem(ViewGroup container, int position) { container.addView(mViewList.get(position)); return (mViewList.get(position)); } @Override public int getCount() { if (mViewList == null) return 0; return mViewList.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } }