利用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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。