Android开发使用Handler的PostDelayed方法实现图片轮播功能

本文实例讲述了Android开发使用Handler的PostDelayed方法实现图片轮播功能。分享给大家供大家参考,具体如下:

第一步:创建MainActivity类

public class BaseActivity extends ActionBarActivity {
    private List<String> mDatas;
    private ViewPager mViewPager;
    private boolean isRun = false;
    private AutoRunTask mTask;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      mViewPager = new ViewPager(this);
      mViewPager.setLayoutParams(new AbsListView.LayoutParams(LayoutParams.MATCH_PARENT, Util
        .getDimen(R.dimen.home_pic_height)));
      mViewPager.setAdapter(new HomePagerAdapter());
      // 设置滑动的初始位置
      mViewPager.setCurrentItem(1000 * mDatas.size());
      mViewPager.setOnTouchListener(this);
      mTask = new AutoRunTask();
      mTask.start();
    }
    @Override
    public boolean onTouch(View v, MotionEvent event) {
      switch (event.getAction()) {
      case MotionEvent.ACTION_DOWN:
        mTask.stop();
        break;
      case MotionEvent.ACTION_UP:
      case MotionEvent.ACTION_CANCEL:
        mTask.start();
        break;
      default:
        break;
      }
      return false; //viewpager必须是false,如果是true是就不能移动
    }
}

第二步:创建无限循环的PagerAdaper

class HomePagerAdapter extends PagerAdapter {
    // 使用此对imageView进行复用
    private LinkedList<ImageView> convertViews = new LinkedList<ImageView>();
    @Override
    public int getCount() {
      // return mPicUrls.size();
      return Integer.MAX_VALUE; // 可以无线滑动
    }
    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
      return arg0 == arg1;
    }
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
      if (object != null && object instanceof ImageView) {
        ImageView imageView = (ImageView) object;
        // 添加到集合里
        convertViews.add(imageView);
        container.removeView(imageView);
      }
      super.destroyItem(container, position, object);
    }
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
      // position 因为无线大,所以
      int index = position % mDatas.size();
      ImageView imageView = null;
      if (convertViews != null && convertViews.size() > 0) {
        // 取出一个imageView
        imageView = convertViews.remove(0);
      } else {
        imageView = new ImageView(Util.getContext());
      }
      String uri = HttpHelper.URL + "image?name=" + mDatas.get(index);
      mBitmapUtils.display(imageView, uri);
      container.addView(imageView);
      return imageView;
    }
}

第三步:使用handler创建轮播类

public class AutoRunTask extends Handler implements Runnable {
  @Override
  public void run() {
    while (isRun) {
      removeCallbacks(this);
      int currentItem = mViewPager.getCurrentItem();
      currentItem++;
      mViewPager.setCurrentItem(currentItem);
      postDelayed(this, 2000);
    }
  }
  public void start() {
    if (!isRun) {
      removeCallbacks(this);
      isRun = true;
      postDelayed(this, 2000);
    }
  }
  public void stop() {
    if (isRun) {
      isRun = false;
      removeCallbacks(this);
    }
  }
}

更多关于Android相关内容感兴趣的读者可查看本站专题:《Android图形与图像处理技巧总结》、《Android开发入门与进阶教程》、《Android调试技巧与常见问题解决方法汇总》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》

希望本文所述对大家Android程序设计有所帮助。

(0)

相关推荐

  • Android客户端实现图片轮播控件

    本文和大家一起写一个Android图片轮播控件,供大家参考,具体内容如下 1. 轮播控件的组成部分 我们以知乎日报Android客户端的轮播控件为例,分析一下轮播控件的主要组成: 首先我们要有用来显示图片的View对象,根据上图中底部中央的5个点,我们知道需要5个ImageView来显示需要轮播的图片,另外还需要5个ImageView来显示5个点.现在考虑以下轮播组件应该具有的行为,首先需要每隔一定时间间隔切换到下一张图片,并且图片间切换的效果应该是平滑的,就像"翻书"一样.由此我们可

  • Android ViewPager实现图片轮播效果

    在app中图片的轮播显示可以说是非常常见的实现效果了,其实现原理不过是利用ViewPager,然后利用handler每隔一定的时间将ViewPager的currentItem设置为当前item的position+1即可.先来看看效果图吧: 就是实现这样的一个轮播广告的效果. 因为这个是自己为了练习仿照某旅游类App做的,所以这里的数据是使用抓包工具抓取的,准备数据等工作就不在这里赘述了,反正数据的添加大体都是相同的.我的思路是这样的,从网络上实时的获取数据(当然你也可以将数据写死),然后通过网络

  • Android线程实现图片轮播

    一.实现效果 本篇文章实现了简单的图片轮播,初始化3张资源图片,初始化3秒更换一次图片背景,轮换播放. 二.知识点 Thread线程start() .sleep();handler机制;Android 控件imageView.setBackgroundResource(id); 还算是较为简单的,涉及的基本都是基础知识. 三.基本思路 1.初始化资源文件 2.创建一个实例化线程对象 new Thread() 3.handler 机制,sendMessage(msg); 来处理线程信息,以改变当前

  • Android开发之滑动图片轮播标题焦点

    先给大家这是下效果图: 谷歌提供的v4包,ViewPager 在布局文件中,先添加<android.support.v4.view.ViewPager/>控件,这个只是轮播的区域 在布局文件中,布置标题描述部分 线性布局,竖向排列,背景色黑色半透明,这个布局和上面的ViewPager底部对齐layout_alignBottom="@id/xxx" <TextView/>居中显示, 小点部分,先放过空的LinearLayout,id是ll_points在代码中对其

  • Android自动播放Banner图片轮播效果

    先看一下效果图 支持本地图片以及网络图片or本地网络混合. 使用方式: <com.jalen.autobanner.BannerView android:id="@+id/banner" android:layout_width="match_parent" android:layout_height="230dip"> </com.jalen.autobanner.BannerView> 核心代码: int length

  • Android使用开源框架ANDROID-IMAGE-INDICATOR实现图片轮播部署

    之前的博文中有介绍关于图片轮播的实现方式,分别为(含超链接): 1.<Android中使用ViewFlipper实现屏幕切换> 2.<Android中使用ViewPager实现屏幕页面切换和页面轮播效果> 3.<Android中使用ImageViewSwitcher实现图片切换轮播导航效果> 今天通过使用GitHub中的开源项目android-image-indicator来简单实现APP自带图片的轮播以及加载网络图片进行轮播. 一.从GitHub上下载项目 GitHu

  • Android实现图片轮播效果的两种方法

    大家在使用APP的过程中,经常会看到上部banner图片轮播的效果,那么今天我们就一起来学习一下,android中图片轮询的几种实现方法: 第一种:使用动画的方法实现:(代码繁琐) 这种发放需要:两个动画效果,一个布局,一个主类来实现,不多说了,来看代码吧: public class IamgeTrActivity extends Activity { /** Called when the activity is first created. */ public ImageView image

  • android Handler详细使用方法实例

    开发环境为android4.1.Handler使用例1这个例子是最简单的介绍handler使用的,是将handler绑定到它所建立的线程中.本次实验完成的功能是:单击Start按钮,程序会开始启动线程,并且线程程序完成后延时1s会继续启动该线程,每次线程的run函数中完成对界面输出nUpdateThread...文字,不停的运行下去,当单击End按钮时,该线程就会停止,如果继续单击Start,则文字又开始输出了. 软件界面如下: 实验主要部分代码和注释: MainActivity.java: 复

  • Android实现广告图片轮播效果

    本文实例介绍了Android广告轮播图效果实现方法,分享给大家供大家参考,具体内容如下 首先看下一下布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:

  • Android实现图片轮播切换实例代码

    利用Android的ViewFlipper和AnimationUtils实现图片带有动画的轮播切换,其中当点击"上一张"图片时,切换到上一张图片:当点击"下一张"图片时,切换到下一张图片.其效果图如下: 设置布局文件,其内容如下: activity_image_flipper_shade.xml <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xm

  • Android开发使用Handler实现图片轮播功能示例

    本文实例讲述了Android使用Handler实现图片轮播功能.分享给大家供大家参考,具体如下: 提前定义好一个Runnable接口,然后用handler调用. Mainactivity代码如下: package com.example.handle_01; import android.os.Handler; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.wid

随机推荐