个人笔记之 GridView+ViewPager+CircleIndicator实现左右滑动、网格界面+popupingwindow弹出显示


首先在布局文件搭好布局


<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>


在activity中声明相应属性


private int pageCount; //界面页数
private int pageSize = 8; //每页item个数
private int curIndex = 0;//当前是第几页
private List<Model> lists;//模型数据源
private View parentView;//需要弹出的View
private 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) {

        }
    });
}


数据绑定、显示popupWindow


  //总的页数=总数/每页数量,并取整
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;
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章