【android实现跳转页面】Android引导页面的简单实现

更新时间:2021-06-15    来源:php应用    手机版     字体:

【www.bbyears.com--php应用】

第一次进入应用的时候,都会有一个引导页面,引导页面的实现起来也很简单,实现的方式也有很多,下面是自己写的一个引导页面的效果,大致的实现思路为:

最外层是一个FragmentActivity,里面包含4个fragment,在fragment中给ViewPager开一个循环,这样实现了图片播,其实效果就是在FragmentActivity中几个fragment滑动切换,
fragment中ViewPager无限轮播和滑动切换;

下面为代码实现:

 

 代码如下

publicclassMainActivityextendsActionBarActivity {

 privateViewPager viewpager;

 privateFragmentManager fm;

 privateViewPagerAdapter adapter;

 privateArrayListitems =newArrayList();

 privateButton btn_guide;

 privateView point1, point2, point3, point4;

 privateintchoiceBg = R.drawable.shape_bule_point;// 被选背景

 privateintunChoiceBg = R.drawable.shape_center_point_red;// 未被选背景

 

 @Override

 protectedvoidonCreate(Bundle savedInstanceState) {

  super.onCreate(savedInstanceState);

  requestWindowFeature(Window.FEATURE_NO_TITLE);

  setContentView(R.layout.activity_main);

  initView();

 }

 

 privatevoidinitView() {

  btn_guide = (Button) findViewById(R.id.btn_guide);

  point1 = findViewById(R.id.point1);

  point2 = findViewById(R.id.point2);

  point3 = findViewById(R.id.point3);

  point4 = findViewById(R.id.point4);

  viewpager = (ViewPager) findViewById(R.id.viewpager);

  fm =this.getSupportFragmentManager();

  items.add(newFirstFragment());

  items.add(newSecondFragment());

  items.add(newThridFragment());

  items.add(newFourFragment());

 

  adapter =newViewPagerAdapter(fm, items);

  viewpager.setAdapter(adapter);

  viewpager.setCurrentItem(0,false);

  viewpager.setOffscreenPageLimit(items.size());

 

  // 被选设置为蓝色

  point1.setBackgroundResource(choiceBg);

 

  viewpager.setOnPageChangeListener(newGuidePageListener());

 }

 

 /**

  * viewpager的滑动监听

  *

  * @author Kevin

  *

  */

 classGuidePageListenerimplementsOnPageChangeListener {

  // 滑动事件

  @Override

  publicvoidonPageScrolled(intposition,floatpositionOffset,intpositionOffsetPixels) {

 

  }

 

  // 某个页面被选中

  @Override

  publicvoidonPageSelected(intposition) {

   if(position ==0) {

    setPointBg(choiceBg, unChoiceBg, unChoiceBg, unChoiceBg);

   }elseif(position ==1) {

    setPointBg(unChoiceBg, choiceBg, unChoiceBg, unChoiceBg);

   }elseif(position ==2) {

    setPointBg(unChoiceBg, unChoiceBg, choiceBg, unChoiceBg);

   }else{

    setPointBg(unChoiceBg, unChoiceBg, unChoiceBg, choiceBg);

   }

   if(position == items.size() -1) {// 最后一个页面

    btn_guide.setVisibility(View.VISIBLE);// 显示开始体验的按钮

   }else{

    btn_guide.setVisibility(View.INVISIBLE);

   }

  }

 

  // 滑动状态发生变化

  @Override

  publicvoidonPageScrollStateChanged(intstate) {

 

  }

 }

 

 /**

  * 设置被选小圆点的背景颜色

  *

  * @param pointBg1

  * @param pointBg2

  * @param pointBg3

  * @param pointBg4

  */

 privatevoidsetPointBg(intpointBg1,intpointBg2,intpointBg3,intpointBg4) {

  point1.setBackgroundResource(pointBg1);

  point2.setBackgroundResource(pointBg2);

  point3.setBackgroundResource(pointBg3);

  point4.setBackgroundResource(pointBg4);

 }

}

在这里要注意ViewPager和fragment在滑动变化时,改变底部小圆点被选的颜色;

publicclassHomeAdapterextendsPagerAdapter {

 privateListdata;

 privateImageCycleViewListener mImageCycleViewListener;

 privateContext context;

 

 publicHomeAdapter(Context context, Listdata, ImageCycleViewListener mImageCycleViewListener) {

  this.context = context;

  this.mImageCycleViewListener = mImageCycleViewListener;

  this.data =newArrayList();

  if(data !=null) {

   this.data.addAll(data);

  }

 }

 

 publicvoidnotifyData(Listdata) {

  if(data !=null) {

   this.data.clear();

   this.data.addAll(data);

  }

  notifyDataSetChanged();

 }

 

 // 当天viewpager有多少个条目

 LinkedListimageList =newLinkedList();

 

 @Override

 publicintgetCount() {

  if(data.size() !=0) {

   returnInteger.MAX_VALUE;// 无限循环

  }else{

   return0;

  }

 }

 

 // 判断返回的对象和加载view对象关系

 @Override

 publicbooleanisViewFromObject(View arg0, Object arg1) {

  returnarg0 == arg1;

 }

 

 // 销毁一个条目

 @Override

 publicvoiddestroyItem(ViewGroup container,intposition, Object object) {

  // super.destroyItem(container, position, object);

  ImageView view = (ImageView) object;

  imageList.add(view);// 把移除的对象添加到缓存集合中

  container.removeView(view);

 

 }

 

 // 创建一个条目

 @Override

 publicObject instantiateItem(ViewGroup container,intposition) {

  intindex =0;

  if(data.size() !=0) {

   index = position % data.size();

  }

  finalImageView image;

  if(imageList.size() >0) {

   image = imageList.remove(0);

  }else{

   image =newImageView(context);

  }

//  BitmapUtils bitmapUtils = BitMapHelper.getBitmapUtils();

  finalGuiderInfo vo = data.get(index);

  if(vo !=null) {

//   String url = vo.url;

//   bitmapUtils.display(image, url, new BitmapLoadCallBack() {

//

//    @SuppressWarnings("deprecation")

//    @Override

//    public void onLoadCompleted(View arg0, String arg1, Bitmap bitmap, BitmapDisplayConfig arg3, BitmapLoadFrom arg4) {

//     image.setImageBitmap(null);

//     BitmapDrawable ob = new BitmapDrawable(context.getResources(), bitmap);

//     image.setBackgroundDrawable(ob);

//    }

//

//    @Override

//    public void onLoadFailed(View arg0, String arg1, Drawable arg2) {

//     // TODO Auto-generated method stub

//

//    }

//   });

   intimageid = vo.imageid;

   image.setImageResource(imageid);

//   bitmapUtils.display(image, url);

  }

  finalintpos = index;

  if(mImageCycleViewListener !=null) {

   image.setOnClickListener(newOnClickListener() {

    @Override

    publicvoidonClick(View v) {

     mImageCycleViewListener.onImageClick(vo, pos, image);

    }

   });

  }

  container.addView(image);// 加载的view对象

  returnimage;// 返回的对象

 }

 

 /**

  * 轮播控件的监听事件

  *

  * @author minking

  */

 publicstaticinterfaceImageCycleViewListener {

 

  /**

   * 单击图片事件

   *

   * @param position

   * @param imageView

   */

  publicvoidonImageClick(GuiderInfo info,intpostion, View imageView);

 }

 

}

publicclassFirstFragmentextendsFragmentimplementsImageCycleViewListener {

 privateView view;

 privateViewPager header_view;

 privateHomeAdapter adapter;

 privateListdata =newArrayList();

 privatebooleanflag;

 privateTextView tv_dis;

 

 @Override

 publicView onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

  view = inflater.inflate(R.layout.first_fragment, container,false);

  setData();

  initView();

 

  returnview;

 }

 

 @SuppressWarnings("deprecation")

 privatevoidinitView() {

  tv_dis = (TextView) view.findViewById(R.id.tv_dis);

  header_view = (ViewPager) view.findViewById(R.id.header_view);

  adapter =newHomeAdapter(getActivity(), data,this);

 

  header_view.setAdapter(adapter);

  header_view.setOnPageChangeListener(newOnPageChangeListener() {

 

   @Override

   publicvoidonPageSelected(intarg0) {

    //计算当前选中的图片index

    intindex = arg0 %2;

    System.out.println("-----------index"+ index);

    GuiderInfo dtGzsApplyCenterHeader = data.get(index);

    tv_dis.setText(""+dtGzsApplyCenterHeader.event_content);

   }

 

   @Override

   publicvoidonPageScrolled(intarg0,floatarg1,intarg2) {

 

   }

 

   @Override

   publicvoidonPageScrollStateChanged(intarg0) {

 

   }

  });

  // 设置中间值

  finalAuToRunTask run =newAuToRunTask();

 

  header_view.setCurrentItem(1000* data.size());// 实现左右两边都可以滑动

  header_view.setOnTouchListener(newOnTouchListener() {

   @Override

   publicbooleanonTouch(View v, MotionEvent event) {

    switch(event.getAction()) {

    caseMotionEvent.ACTION_DOWN:// 按下

     run.stop();

 

     break;

    caseMotionEvent.ACTION_CANCEL:// 事件取消

    caseMotionEvent.ACTION_UP:// 抬起

     run.start();

     break;

    default:

     break;

    }

    returnfalse;// viewpager触摸事件返回值要是fasle不能为true

   }

  });

 

  run.start();// 开启轮播

 }

 

 @Override

 publicvoidonImageClick(GuiderInfo info,intpostion, View imageView) {

 

 }

 

 // 自动轮播

 classAuToRunTaskimplementsRunnable {

  @Override

  publicvoidrun() {

   if(flag) {

    // 取消之前的任务

    DensityUtil.cancle(this);

    // 获取当前条目

    intcurrentItem = header_view.getCurrentItem();

    currentItem++;

    header_view.setCurrentItem(currentItem);

    // 延迟执行当前的一个任务

    DensityUtil.postDelayed(this,2000);// 递归调用

   }

  }

 

  publicvoidstart() {

   if(!flag) {

    // 取消之前的任务

    DensityUtil.cancle(this);

    flag =true;

    // 延迟执行当前的一个任务

    DensityUtil.postDelayed(this,1000);// 递归调用

   }

  }

 

  publicvoidstop() {

   if(flag) {

    flag =false;

    DensityUtil.cancle(this);

   }

  }

 }

 

 privatevoidsetData() {

  GuiderInfo vo =newGuiderInfo();

  vo.imageid = R.drawable.shape_red;

  vo.event_content="红色";

  data.add(vo);

  GuiderInfo vo1 =newGuiderInfo();

  vo1.imageid = R.drawable.shape_yellow;

  vo1.event_content="黄色";

  data.add(vo1);

 

 }

}

 

以上为效果实现的主要代码,效果运行如下:

上面的效果图还有一小部分效果未展示出来,其实上面的圆是循环轮播的,同时也是可以滑动的;

源码:Androidpager

本文来源:http://www.bbyears.com/jiaocheng/123813.html

热门标签

更多>>

本类排行