viewpager+gridview

来源:互联网 发布:udp3100端口 编辑:程序博客网 时间:2024/06/03 22:59


先上效果图


再上xml布局文件

<RelativeLayout    android:id="@+id/type_viewpager"    android:layout_marginTop="8dp"    android:layout_below="@+id/layout_home_viewpager"    android:layout_width="fill_parent"    android:background="#ffffff"    android:layout_height="150dp"    >    <android.support.v4.view.ViewPager        android:id="@+id/vp_home_gridview"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v4.view.ViewPager>    <LinearLayout        android:id="@+id/layout_home_gridview_point"        android:layout_width="match_parent"        android:layout_height="20dp"        android:layout_alignParentBottom="true"        android:gravity="center"        android:orientation="horizontal"/></RelativeLayout>

接着上封装好的代码


public class ViewPagerGridView {    private ViewPager viewpager_gridview;    List<HomeTypeBean> list;//HomeTypeBeangen根据项目的需要可自己写    List<HomeTypeBeanList> listbeans;//HomeTypeBeanList根据项目的需要可自己写    private LinearLayout layout;    private Activity context;    private int currentitem=0;    private int size  = 0;    /**     *     * @param context     * @param viewpager_gridview  布局文件中的viewpager     * @param layout  小圆点所在的layout     * @param list  所有的item集合     * @param size  每页显示多少个(一般10个)     */    public ViewPagerGridView(Activity context, ViewPager viewpager_gridview, LinearLayout layout, List<HomeTypeBean> list , int size) {       this.context = context;        this.viewpager_gridview = viewpager_gridview;        this.list = list;        this.layout = layout;        this.size = size;        initView();        initData();    }    private void initView() {        listbeans = new ArrayList<>();    }    private void initData() {        fengzhuang(list,size);        setRoundviewColor();        viewpager_gridview.setAdapter(new MyPagerAdpater(listbeans,context));        viewpager_gridview.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            @Override            public void onPageSelected(int position) {                currentitem = position;                setRoundviewColor();            }            @Override            public void onPageScrollStateChanged(int state) {            }        });    }    /**     *     * @param list 所有的item的集合     * @param size 每页显示多少个item     */    public void fengzhuang(List<HomeTypeBean> list, int size){        int n = list.size()%size;        int num;        if (n!=0){            num = (int) list.size()/size+1;        }else {            num = (int) list.size()/size;        }        for (int i = 1;i<=num;i++){            List<HomeTypeBean> stringList =new ArrayList();            for (int j = 0;j<list.size();j++){                if (j>=(i-1)*size&&j<i*size){                    stringList.add(list.get(j));                }            }            HomeTypeBeanList bean = new HomeTypeBeanList();            bean.setTypeBeanList(stringList);            listbeans.add(bean);        }    }    public View roundview(int height){        RoundImageView view = new RoundImageView(context);        view.setImageResource(R.mipmap.ic_launcher);//        View view = new View(context);        LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(height,height);        params.setMargins(10, 0, 0, 0);//设置左边margin为10        view.setLayoutParams(params);        return view;    }    public void setRoundviewColor(){        layout.removeAllViews();        for (int i = 0;i<listbeans.size();i++){            if (i == currentitem){                layout.addView(roundview(20));            }else {                layout.addView(roundview( 10));            }        }    }    class MyPagerAdpater extends PagerAdapter {        private List<HomeTypeBeanList> listbeans;        private Context context;        public MyPagerAdpater(List<HomeTypeBeanList> listbeans, Context context) {            this.context = context;            this.listbeans = listbeans;        }        @Override        public int getCount() {            return listbeans.size();        }        @Override        public boolean isViewFromObject(View view, Object object) {            return view==object;        }        @Override        public void destroyItem(ViewGroup container, int position, Object object) {        }        @Override        public Object instantiateItem(ViewGroup container, int position) {            GridView gridView = new GridView(context);            LinearLayout.LayoutParams layoutParams =                    new LinearLayout.LayoutParams(viewpager_gridview.getMeasuredWidth(),viewpager_gridview.getMeasuredHeight());            gridView.setLayoutParams(layoutParams);            gridView.setNumColumns(size/2);            gridView.setAdapter(new MyGridViewAdapter(context, listbeans,position));            container.addView(gridView);            return gridView;        }    }    private int ceshi = 0;    class MyGridViewAdapter extends BaseAdapter {        private Context context;        private List<HomeTypeBeanList> list;        private int flag;        public MyGridViewAdapter(Context context, List<HomeTypeBeanList> list, int flag) {            this.context = context;            this.list = list;            this.flag = flag;            ImageLoaderConfiguration configuration = ImageLoaderConfiguration.createDefault(context);            ImageLoader.getInstance().init(configuration);        }        @Override        public int getCount() {            return list.get(flag).getTypeBeanList().size();        }        @Override        public Object getItem(int position) {            return list.get(flag).getTypeBeanList().get(position);        }        @Override        public long getItemId(int position) {            return position;        }        @Override        public View getView(final int position, View convertView, final ViewGroup parent) {            ViewHolder viewHolder=null;            if (convertView==null){                viewHolder = new ViewHolder();                convertView = LayoutInflater.from(context).inflate(R.layout.layout_viewpager_gridview,parent,false);                viewHolder.roundImageView = (RoundImageView) convertView.findViewById(R.id.rv_viewpager_gridview);                viewHolder.textView = (TextView) convertView.findViewById(R.id.tv_viewpager_gridview);                convertView.setTag(viewHolder);            }else {                viewHolder = (ViewHolder) convertView.getTag();            }            viewHolder.textView.setText(list.get(flag).getTypeBeanList().get(position).getMtname());            //AppConfig.DEFAULT_IMG_MERCHANT_BG 配置iamgeloader的显示参数            ImageLoader.getInstance().displayImage(Config.web.picUrl+list.get(flag).getTypeBeanList().get(position).getLogourl(), viewHolder.roundImageView, AppConfig.DEFAULT_IMG_MERCHANT_BG);            convertView.setOnClickListener(new View.OnClickListener() {                @Override                public void onClick(View v) {                    if (clickListener!=null) {                        clickListener.onCridViewClickListener(v, list.get(flag).getTypeBeanList().get(position).getPkmertype(), list.get(flag).getTypeBeanList().get(position).getMtname());                    }                }            });            return convertView;        }    }    class ViewHolder {        RoundImageView roundImageView;//处理圆图        TextView textView;//显示名字    }    public void setOnGridViewClickListener(GridViewClickListener clickListener){//设置事件监听        this.clickListener = clickListener;    }    private GridViewClickListener clickListener;//处理gridview的item点击事件的接口回调    public interface GridViewClickListener {        public void onCridViewClickListener(View v,String pkmertype,String name);    }}

接着上bean类

public class HomeTypeBean {    private String addressurl;    private String logourl;    private String mtlevel;    private String parentpk;    private String mtname;    private String pkmertype;    private String merchantCount;    private String type;    public String getMerchantCount() {        return merchantCount;    }    public void setMerchantCount(String merchantCount) {        this.merchantCount = merchantCount;    }    public String getParentpk() {        return parentpk;    }    public void setParentpk(String parentpk) {        this.parentpk = parentpk;    }    public void setAddressurl(String addressurl) {        this.addressurl = addressurl;    }    public String getAddressurl() {        return addressurl;    }    public void setLogourl(String logourl) {        this.logourl = logourl;    }    public String getLogourl() {        return logourl;    }    public void setMtlevel(String mtlevel) {        this.mtlevel = mtlevel;    }    public void setMtname(String mtname) {        this.mtname = mtname;    }    public void setPkmertype(String pkmertype) {        this.pkmertype = pkmertype;    }    public void setType(String type) {        this.type = type;    }    public String getMtlevel() {        return mtlevel;    }    public String getMtname() {        return mtname;    }    public String getPkmertype() {        return pkmertype;    }    public String getType() {        return type;    }}

另外一个bean类

public class HomeTypeBeanList {    private List<HomeTypeBean> typeBeanList;    public List<HomeTypeBean> getTypeBeanList() {        return typeBeanList;    }    public void setTypeBeanList(List<HomeTypeBean> typeBeanList) {        this.typeBeanList = typeBeanList;    }}


最后上调用方法:

        List<HomeTypeBean> homeTypeBeanList = new ArrayList<>();        for (int i=0;i<10;i++){            HomeTypeBean homeTypeBean = new HomeTypeBean();            homeTypeBean.setAddressurl("http://a.hiphotos.baidu.com/zhidao/pic/item/f9dcd100baa1cd11aa2ca018bf12c8fcc3ce2d74.jpg");            homeTypeBean.setLogourl("");            homeTypeBean.setMerchantCount("");            homeTypeBean.setMtlevel("");            if (i==0){                homeTypeBean.setMtname("美食");            }else if (i==1){                homeTypeBean.setMtname("酒店");            }else if (i==2){                homeTypeBean.setMtname("旅游");            }else if (i==3){                homeTypeBean.setMtname("购物");            }else if (i==4){                homeTypeBean.setMtname("爱美丽");            }else if (i==5){                homeTypeBean.setMtname("健康");            }else if (i==6){                homeTypeBean.setMtname("休闲娱乐");            }else if (i==7){                homeTypeBean.setMtname("智能");            }else if (i==8){                homeTypeBean.setMtname("生活服务");            }else {                homeTypeBean.setMtname("更多");            }            homeTypeBean.setType("");            homeTypeBean.setPkmertype("");            homeTypeBean.setParentpk("");            homeTypeBeanList.add(homeTypeBean);        }        ViewPagerGridView viewPagerGridView =  new ViewPagerGridView(getActivity(),vp_home_gridview,layout_home_gridview_point,homeTypeBeanList,10);

RoundImageView

public class RoundImageView  extends ImageView{    private Paint paint = new Paint();    public RoundImageView(Context context) {        super(context);    }    public RoundImageView(Context context, AttributeSet attrs) {        super(context, attrs);    }    @SuppressWarnings("deprecation")    @Override    protected void onDraw(Canvas canvas) {        BitmapShader shader;        if (getDrawable() instanceof BitmapDrawable) {            BitmapDrawable bitmapDrawable = (BitmapDrawable)getDrawable();            // clip            shader = new BitmapShader(bitmapDrawable.getBitmap(), Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);            RectF rect = new RectF(0.0f, 0.0f, getWidth(), getHeight());            int width = bitmapDrawable.getBitmap().getWidth();            int height = bitmapDrawable.getBitmap().getHeight();            RectF src = null;            if (((float)width) / height > 1) {                src = new RectF(0.0f, 0.0f, height, height);            } else {                src = new RectF(0.0f, 0.0f, width, width);            }            Matrix matrix = canvas.getMatrix();            matrix.setRectToRect(src, rect, Matrix.ScaleToFit.CENTER);            shader.setLocalMatrix(matrix);            // 抗锯齿            paint.setAntiAlias(true);            paint.setShader(shader);            canvas.drawRoundRect(rect, this.getWidth() / 2, this.getHeight() / 2, paint);        }    }}


提示:

ViewPagerGridView类中用的是imageloader图片框架请自行下载或者改成自己用的框架




0 0