個人筆記之 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;
    }

}

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