黑马程序员技术交流社区

标题: 简单的实现美团宫格导航ViewPager+GridView [打印本页]

作者: 貂裘换酒    时间: 2016-6-26 09:47
标题: 简单的实现美团宫格导航ViewPager+GridView
public class MainActivity extends Activity {  
  
    //准备数据  
    ArrayList<InfoBean> list=null;  
    InfoBean info=null;  
    ViewPager viewPager;  
    LinearLayout ll_dots;  
    private ImageView[] dots;   
        
    /** ViewPager页数 */   
     private int viewPager_size;  
    //当前页  
    private int currentIndex;  
    //gridView 页面item的数量  
    int pageItemCount;  
    //页面的宽高  
    int width;  
    int height;  
    //保存每个GridView的视图  
    ArrayList<View> viewlist=null;  
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
        WindowManager wm=(WindowManager)this.getSystemService(this.WINDOW_SERVICE);  
        width=wm.getDefaultDisplay().getWidth();  
        height=wm.getDefaultDisplay().getHeight();  
        Log.e("width", width+"");  
        Log.e("height", height+"");  
        list=getData();  
        Log.e("size", list.size()+"");  
        //初始化视图  
        initView();  
    }  
    private void initView() {  
        viewPager=(ViewPager) findViewById(R.id.vPager);  
        ll_dots=(LinearLayout) findViewById(R.id.ll_dots);  
        initDots();  
        setAdapter();  
    }  
    private void setAdapter() {  
        viewlist=new ArrayList<View>();  
        for(int i=0;i<viewPager_size;i++){  
            viewlist.add(getGridViewItem(i));    //36  
        }  
        viewPager.setAdapter(new ViewPager_GridView_Adapter(viewlist));  
    }  
    //每个GridView页面中的布局  
    private View getGridViewItem(int index) {  
        LayoutInflater inflater=(LayoutInflater) this.getSystemService(this.LAYOUT_INFLATER_SERVICE);  
        View layout=inflater.inflate(R.layout.channel_viewpage_gridview, null);  
        GridView gridView=(GridView) layout.findViewById(R.id.vp_gv);  
         
        int col=(width/160) >2 ?(width/160):3;  
         
        Log.e("col", col+"");//3   4  
        gridView.setNumColumns(col);  
        //每个页面的adapter  
        ViewPager_GV_ItemAdapter adapter=new ViewPager_GV_ItemAdapter(this, list, index, pageItemCount);  
        gridView.setAdapter(adapter);  
        //设置gridView中点击Item事件  
        gridView.setOnItemClickListener(new OnItemClickListener() {  
  
              
  
            @Override  
            public void onItemClick(AdapterView<?> parent, View view,  
                    int position, long id) {  
                Toast.makeText(MainActivity.this, position + currentIndex * pageItemCount+"", Toast.LENGTH_SHORT).show();  
                    if(null !=list.get(position + currentIndex * pageItemCount).getOnClickListener()){  
                        list.get(position+currentIndex*pageItemCount).getOnClickListener().ongvItemClickListener(view);  
                    }  
            }  
        });  
        return gridView;  
    }  
    private void initDots() {  
        int col = (width/160) >2 ? (width/160) :3;   //3    4  
        int row = (height/400) >4?(height/400):2;   //2     2  
        pageItemCount = col * row;  //每一页可装item   //6  
        //gridView 的页数  
        viewPager_size = list.size() / pageItemCount +1;  //5  
   
        if (0 < viewPager_size) {   
            ll_dots.removeAllViews();   
            if (1 == viewPager_size) {   
                ll_dots.setVisibility(View.GONE);   
            } else if (1 < viewPager_size) {   
                ll_dots.setVisibility(View.VISIBLE);   
                for (int j = 0; j < viewPager_size; j++) {   
                    ImageView image = new ImageView(this);   
                    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(10, 10);  //dot的宽高  
                    params.setMargins(3, 0, 3, 0);   
                    image.setBackgroundResource(R.drawable.dot_unselected);   
                    ll_dots.addView(image, params);   
                }   
            }   
        }   
        if (viewPager_size != 1) {   
            dots = new ImageView[viewPager_size];   
            for (int i = 0; i < viewPager_size; i++) {  
                //从布局中填充dots数组  
                dots[i] = (ImageView) ll_dots.getChildAt(i);   
                //dots[i].setEnabled(true);   
                //dots[i].setTag(i);   
            }   
            currentIndex = 0;  //当前页  
            //dots[currentIndex].setEnabled(false);   
            dots[currentIndex].setBackgroundResource(R.drawable.dot_selected);  
            viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {   
   
                @Override   
                public void onPageSelected(int arg0) {   
                    setCurDot(arg0);   
                }   
   
                 
  
                @Override   
                public void onPageScrolled(int arg0, float arg1, int arg2) {   
                    // TODO Auto-generated method stub   
   
                }   
   
                @Override   
                public void onPageScrollStateChanged(int arg0) {   
                    // TODO Auto-generated method stub   
   
                }   
            });   
        }   
         
    }  
    private ArrayList<InfoBean> getData() {  
        list=new ArrayList<InfoBean>();  
        for(int i=0;i<46;i++){  
            info=new InfoBean("苹果"+i, R.drawable.apple, i);  
            list.add(info);  
        }  
        return list;  
    }  
     private void setCurDot(int position) {  
         if (position < 0 || position > viewPager_size - 1 || currentIndex == position) {   
                return;   
            }   
            for(int i=0;i<dots.length;i++){  
                dots[i].setBackgroundResource(R.drawable.dot_unselected);  
            }  
            //dots[positon].setEnabled(false);   
           // dots[currentIndex].setEnabled(true);   
            dots[position].setBackgroundResource(R.drawable.dot_selected);  
            currentIndex = position;   
              
        }  
}  




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2