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
- ViewPager的多种应用详解(二)
- ViewPager的多种应用详解(一)
- Android 进阶——ViewPager详解之ViewPager的应用(二)
- ViewPager的简单应用(二)
- ViewPager+Fragment+多种适配器视图的综合应用
- ViewPager 详解(二)---详解四大函数
- 《ViewPager 详解(二)---详解四大函数》
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数
- ViewPager 详解(二)---详解四大函数 .
- 《ViewPager 详解(二)---详解四大函数》
- ViewPager 详解(二)---详解四大函数
- cocos2d3.x创建项目
- 学习UPnP
- 编译器架构的王者LLVM——(12)使用JIT引擎
- 最新版SDWebImage的使用
- 蓝桥杯 BASIC-6杨辉三角形
- ViewPager的多种应用详解(二)
- 【慕课笔记】第二章 变量和常量 第1节 JAVA中的关键字
- Android四大组件之广播接收器(一)
- 【php】$_GET函数
- ubantu 安装erlang18.0 记录
- 欢迎使用CSDN-markdown编辑器
- Java Web 服务器性能监控工具 JavaMelody
- leetCode_Move Zeroes_
- PyCharm 注册码