利用MVC编写广告条轮播效果
我理解的安卓中MVC思想是利用Holder进行编程,展示布局,提供视图,将视图和数据进行绑定起来,在很多App中我们能见到广告条,广告条这里我们可以使用FramLayout进行填充,然后利用MVC的思想将提供的布局添加到FrameLayout中即可;广告条的实现也可以利用Banner等开源框架等,这里就不列举了,感兴趣的朋友可以去搜下
当然由于我这里的项目的图片是设计师那边提供好的,并不是从网上获取的,所以我这里就直接写了ViewPager来进行填充了
逻辑:
packagecom.hanzheng.znxl.fragment; importandroid.support.v4.view.ViewPager; importandroid.view.MotionEvent; importandroid.view.View; importandroid.widget.ImageView; importandroid.widget.LinearLayout; importandroid.widget.RelativeLayout; importcom.hanzheng.znxl.R; importcom.hanzheng.znxl.adapter.OnPagerChangeListenerImp; importcom.hanzheng.znxl.adapter.WorkFragmentBannerAdapter; importcom.hanzheng.znxl.base.BaseFragment; importcom.hanzheng.znxl.base.MyApplication; importcom.hanzheng.znxl.utils.ToastUtil; importbutterknife.Bind; importbutterknife.ButterKnife; importbutterknife.OnClick; /** *Createdbyzmybion29/12/2016. */ publicclassWorkFragmentextendsBaseFragment{ @Bind(R.id.fragment_work_pic_viewpager) ViewPagermFragmentWorkPicViewpager; @Bind(R.id.ll_dots) LinearLayoutmLLDots; //@Bind(R.id.tv_desc) //TextViewmTvDesc; @Bind(R.id.ll_kaoqing) LinearLayoutmLlKaoqing; @Bind(R.id.ll_execute) LinearLayoutmLlExecute; @Bind(R.id.ll_daohang) LinearLayoutmLlDaohang; @Bind(R.id.ll_sudden) LinearLayoutmLlSudden; @Bind(R.id.ll_policething) LinearLayoutmLlPolicething; @Bind(R.id.ll_collect) LinearLayoutmLlCollect; @Bind(R.id.ll_search) LinearLayoutmLlSearch; @Bind(R.id.ll_noticevoice) LinearLayoutmLlNoticevoice; @Bind(R.id.iv_book) ImageViewmIvBook; @Bind(R.id.rl_shouce) RelativeLayoutmRlShouce; @Bind(R.id.ibtn_yuan) ImageViewmIbtnYuan; @Bind(R.id.ibtn_helpbook) ImageViewmIbtnHelpbook; privateint[]imageResIds={R.drawable.banner1,R.drawable.banner2}; privateString[]descs={"武汉保安集团","智能巡逻系统"}; privateAutoScrollTaskmAutoScrollTask; @Override publicvoidinitData(){ mFragmentWorkPicViewpager.addOnPageChangeListener(newOnPagerChangeListenerImp(){ @Override publicvoidonPageSelected(intposition){ changeDotAndDesc(position); } }); mFragmentWorkPicViewpager.setAdapter(newWorkFragmentBannerAdapter(imageResIds)); initDot(); changeDotAndDesc(0);//默认选择第一页 mFragmentWorkPicViewpager.setCurrentItem(mFragmentWorkPicViewpager.getAdapter().getCount()/2); if(mAutoScrollTask==null){ mAutoScrollTask=newAutoScrollTask(); mAutoScrollTask.start(); } //按下去停止轮播 mFragmentWorkPicViewpager.setOnTouchListener(newView.OnTouchListener(){ @Override publicbooleanonTouch(Viewview,MotionEventmotionEvent){ switch(motionEvent.getAction()){ caseMotionEvent.ACTION_DOWN: caseMotionEvent.ACTION_MOVE: mAutoScrollTask.stop(); break; caseMotionEvent.ACTION_UP: mAutoScrollTask.start(); break; } returnfalse; } }); } privatevoidchangeDotAndDesc(intposition){ position=position%imageResIds.length; //mTvDesc.setText(descs[position]); for(inti=0;i这里轮播图下方的指示器(小点)或者图片描述都是可以加上的,具体依据公司美工的要求即可
做了个按下去停止轮播的优化; 给viewpager设计点击监听,重写三个方法,抬起则start(),走run方法viewpager跳到下一页,并走AutoScrollTask中的start(),方法,主线程的Handler发送延时消息,则继续循环run方法, 实现轮播图的无线循环
对了,说下轮播图的PagerAdapter的写法
packagecom.hanzheng.znxl.adapter; importandroid.support.v4.view.PagerAdapter; importandroid.view.View; importandroid.view.ViewGroup; importandroid.widget.ImageView; /** *Createdbyzmybion31/12/2016. */ publicclassWorkFragmentBannerAdapterextendsPagerAdapter{ privateint[]imageResIds; publicWorkFragmentBannerAdapter(int[]imageResIds){ this.imageResIds=imageResIds; } @Override publicintgetCount(){ returnimageResIds.length*1000000; } @Override publicbooleanisViewFromObject(Viewview,Objectobject){ returnview==object; } @Override publicObjectinstantiateItem(ViewGroupcontainer,intposition){ ImageViewiv=newImageView(container.getContext()); position=position%imageResIds.length; iv.setBackgroundResource(imageResIds[position]); iv.setScaleType(ImageView.ScaleType.FIT_XY); container.addView(iv); returniv; } @Override publicvoiddestroyItem(ViewGroupcontainer,intposition,Objectobject){ container.removeView((ImageView)object); } }这里返回一个很大的数,其实也没必要返回Integer.MAX_VALUE; 因为这样写的话还要对余数进行判断,让下方的Indicator和上方的图片切换保持一致, 当然,这里由于美工直接给的图,所以我直接放在工程下了,实际如果是从网上获取的,则使用Picasso或者Glide图片加载框架即可
至此,一个简单的图片轮播功能就已经实现了。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。