ViewPager的多种应用详解(二)

来源:互联网 发布:天刀捏脸刘亦菲数据 编辑:程序博客网 时间:2024/05/20 11:33

上一篇介绍了viewpager作为软件引导方式的应用,在本篇我们会介绍另外的一种实现。

2.自动滚动的应用----广告版;

我们经常见到的类似优酷客户端的广告展示界面就是用viewpager来实现的,上一篇我们介绍了viewpager的几个关键控制方法,这篇也是在这些方法上增加了一些其他设定。如何实现自动滚动呢,首先我们需要一个线程来控制使页面进行切换,但是如何让线程进行周期的执行呢?在java中我们有一个类ScheduledExecutorService,它提供了定时周期的执行指定的任务的功能:

 public ScheduledFuture<?> scheduleAtFixedRate(Runnable command,long initialDelay,long period,TimeUnit unit);
这里command为执行的线程,initialDelay为初始化时延,period为两次执行最小时间间隔,unit为计时单位;

因此我们可以用此方法来使切换界面的线程按指定的时间来周期执行,达到固定时间切换界面的效果。因此我们可以把开启线程写在onstart方法里,在onstop方法中写scheduledExecutorService.shutdown();来停止执行。

接下来我们需要讨论如何进行切换界面,我们可以通过currentItem = (currentItem + 1) % imageViews.size();来计算下一页的页面号,因此只需要把这个写在线程中就可以依次增长页面,当到达最后一页时又会重新把currentItem置为0,因此每次只需要在计算完currentItem后发送消息给handler进行页面的更替即可。

同时我们在上一篇讲了onPageSelected方法,他是在跳转完后进行执行的,在此处我们可以对界面中的圈圈进行更新,到这个地方我们的大体思路就已经很清晰了下面来看代码。

package com.example.service;import java.util.ArrayList;import java.util.List;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;import com.example.sess.CanvasImageTask;import com.example.testqq.GeneralFragment;import com.example.testqq.R;import com.example.util.paraUtil;import android.graphics.Bitmap;import android.os.Bundle;import android.os.Handler;import android.os.Message;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.ImageView;import android.widget.ImageView.ScaleType;public class ServiceFragment extends GeneralFragment {private ViewPager mViewPager;private MyAdapter mAdapter;private int currentItem = 0;private List<ImageView> imageViews;private List<View> dots;private View view;public static boolean threadContinuedata = true;// Handler rHandle = null;private ScheduledExecutorService scheduledExecutorService;public final Handler viewHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {mViewPager.setCurrentItem(currentItem);super.handleMessage(msg);}};@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {view = inflater.inflate(R.layout.fragment_service, container, false);mViewPager = (ViewPager) view.findViewById(R.id.vp);SetDataToUI();return view;}void SetDataToUI() {imageViews = new ArrayList<ImageView>();for (int i = 0; i < 4; i++) {ImageView imageView = new ImageView(getActivity());Bitmap bit = HttpLoad.getDiskBitmap(paraUtil.savepath + "/" + String.valueOf(i) + ".png");imageView.setImageBitmap(bit);imageView.setScaleType(ScaleType.CENTER_CROP);imageViews.add(imageView);}dots = new ArrayList<View>(); // 有几张图片就有几个原点dots.clear();view.findViewById(R.id.v_dot0).setVisibility(View.VISIBLE);view.findViewById(R.id.v_dot1).setVisibility(View.VISIBLE);view.findViewById(R.id.v_dot2).setVisibility(View.VISIBLE);view.findViewById(R.id.v_dot3).setVisibility(View.VISIBLE);dots.add(view.findViewById(R.id.v_dot0));dots.add(view.findViewById(R.id.v_dot1));dots.add(view.findViewById(R.id.v_dot2));dots.add(view.findViewById(R.id.v_dot3));mViewPager.setAdapter(new MyAdapter());////mViewPager.setOnPageChangeListener(new MyPageChangeListener());}/** * 换行切换任务 *  * @author Administrator *  */private class ScrollTask implements Runnable {public void run() {synchronized (mViewPager) {System.out.println("currentItem: " + currentItem);currentItem = (currentItem + 1) % imageViews.size();viewHandler.obtainMessage().sendToTarget();}}}@Overridepublic void onStart() {scheduledExecutorService = Executors.newSingleThreadScheduledExecutor();scheduledExecutorService.scheduleAtFixedRate(new ScrollTask(), 1, 2, TimeUnit.SECONDS);super.onStart();}@Overridepublic void onStop() {// ��Activity���ɼ��ʱ��ֹͣ�л�scheduledExecutorService.shutdown();super.onStop();}public class MyPageChangeListener implements OnPageChangeListener {private int oldPosition = 0;/** * This method will be invoked when a new page becomes selected. * position: Position index of the new selected page. */public void onPageSelected(int position) {currentItem = position;dots.get(oldPosition).setBackgroundResource(R.drawable.dot_normal);dots.get(position).setBackgroundResource(R.drawable.dot_focused);oldPosition = position;}public void onPageScrollStateChanged(int arg0) {}public void onPageScrolled(int arg0, float arg1, int arg2) {}}private class MyAdapter extends PagerAdapter {@Overridepublic int getCount() {return paraUtil.imagepath.length;}@Overridepublic Object instantiateItem(View arg0, int arg1) {((ViewPager) arg0).addView(imageViews.get(arg1));return imageViews.get(arg1);}@Overridepublic void destroyItem(View arg0, int arg1, Object arg2) {((ViewPager) arg0).removeView((View) arg2);}@Overridepublic boolean isViewFromObject(View arg0, Object arg1) {return arg0 == arg1;}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {}@Overridepublic Parcelable saveState() {return null;}@Overridepublic void startUpdate(View arg0) {}@Overridepublic void finishUpdate(View arg0) {}}}
精益求精方可融会贯通!


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被供应商起诉了怎么办 离婚案原告撤诉怎么办 离婚起诉不到场怎么办 判决书判了败诉怎么办 对执行裁定不服怎么办 贴吧尺寸超限怎么办 usbkey密码忘了怎么办 农信房贷逾期几个小时怎么办 广东农信房贷逾期一天怎么办 三亚的房太潮了怎么办 没高中档案积分怎么办 临牌过期了怎么办 居住证凭证丢了怎么办 上海市居住证过期了怎么办 上海居住证积分不够怎么办 居住证登录密码忘记怎么办 投靠中考上海居住证怎么办 嫁入广州户口怎么办 上海积分扣完了怎么办 公立小学积分不够怎么办 查不到户口信息怎么办 小孩上不到户口怎么办 离开上海上海户口怎么办? 上海没房户口怎么办 没有房照动迁怎么办 持有上海居住证怎么办准生证 换公司后公积金怎么办 换工作了住房公积金怎么办 以前买的户口怎么办 上海落户积分不够怎么办 带坏受孕了怎么办 对公转账转错了怎么办 对公转错账怎么办 银行卡转错了怎么办 人户分离证明怎么办 暂居证怎么办才快 房产证户口本信息泄漏怎么办 户主迁走了户口怎么办 户口本丢了应该怎么办 户口本遗失了应该怎么办 户口迁出河南怎么办居住证