Android实现图片循环播放的实例方法

很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片。下面我们来看一下具体的实现方法。首先,我们需要在XML...
    很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片。下面我们来看一下具体的实现方法。

首先,我们需要在XML文件中配置一下将要播放图片的控件(main.xml):


代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

  android:layout_width = "fill_parent"

  android:layout_height= "fill_parent"

  android:orientation="vertical">

  <!--这里是要播放图片的控件,bofang是用来播放图片的View类-->

  <com.sunianjinshi.bofang

    android:layout_width="180dip"

    android:layout_height = "250dip"

  />

</LinearLayout>

好了,到这里需要用来播放图片的控件就配置好了,接下来我们就要来写实现类bofang.java。


代码如下:

import android.content.Context; 
import android.content.res.Resources; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Paint; 
import android.util.AttributeSet; 
import android.view.View;

public class bofang extends View

{

  int COMPONENT_WIDTH;//控件的宽度

  int COMPONENT_HEIGHT;//控件的高度

  boolean initflag = false;//是不是已经初始化图片

  Bitmap[] bmp;//用来寄存图片的数组

  int currPicIndex = 0;//以后播放图片的ID

  int[] bitmapId;//图片编号ID

  boolean workFlag = true;//播放图片的线程标识位

  public GGViewCX(Context father,AttributeSet as)//重写构造函数

  {

    //首先,要播放图片,就先要有图片,那就先给各个图片编号吧,这里的图片资源寄存在了res下的drawable文件夹下了

    int[] bitmapId ={R.drawable.adv1, R.drawable.adv2, R.drawable.adv3};

    //好了,图片的编号当初已经搞定了,接下来该干什么呢?对,应该将资源里的图片塞进Bitmap数组了,那么我们先来确定将要播放的图片的数量,即Bitmap数组的长度

    bmp = new Bitmap[bitmapId.length];//这里不要直接将数值赋给bmp,因为我们可能会不定期地改换图片资源,这样我们就要修改多处代码,而我们这样根据

    //图片的ID来确定图片的数量,以减少不必要的费事,下面开始初始化图片,我们将初始化图片放在一个函数里

    initBitmap();//图片初始化终了

    //图片初始化终了了,接下来我们要做的就是播放图片了,但是播放图片之前,我们有一个问题,就是怎样让图片实现循环播放?这里我们另开一个新的线程来准时变动

    //要播放的图片的ID,以实现图片的循环播放,要实现循环播放图片的功能,我们需要覆写onDraw函数,首先,我们来新开一个线程

    new Thread()

    {

      //重写run方法

      public void run() 
              { 
                  // TODO Auto-generated method stub 
                  while(workflag)//一直执行这个循环(死循环) 
                  { 
                      currIndex = (currIndex+1)%bitmapId.length;//变动图片的ID 
                      bofang.this.postInvalidate();//刷新屏幕,导致屏幕重绘 
                      try
                      { 
                          Thread.sleep(3000);//到此处暂停3秒钟,然后继续执行run函数,即实现每隔3秒钟刷新屏幕一次 
                      } 
                      catch (InterruptedException e)  
                      { 
                          // TODO Auto-generated catch block 
                          e.printStackTrace(); 
                      } 
                  } 
              }

    }.start();

  }

  //初始化图片

  public void initBitmap()

  {

    //获得资源图片

    Resources res = this.getResources();

    for(int i=0;i<bitmapId.length;i++)

    {

      bmp[i] = BitmapFactory.decodeResource(res, bitmapId[i]);

    }

  }

  //覆写onDraw方法

  @Override
    protected void onDraw(Canvas canvas)  
    { 
        // TODO Auto-generated method stub 
        super.onDraw(canvas); 
        if(!initflag)//检查是偶已经获得控件的宽和高,如果没有,那么就获得控件的宽和高 
        { 
            COMPONENT_WIDTH = this.getWidth(); 
            COMPONENT_HEIGHT = this.getHeight(); 
            initflag = true; 
        } 
        canvas.drawBitmap(bma[currIndex], 0, 0,paint);//绘制图片 
    }

}

PS:这里要说明一下,下面的代码中其实有些地方还有更好的实现方法。

比如:

我们为了实现准时变动要播放的图片的ID,以实现循环播放,新开了了一个线程,并且开了一个死循环,但实际这样的写法可控性很低,JDK的java.util.concurrent中提供了大批的方法去控制一段代码准时执行,标准的改写下面的代码如下:


代码如下:

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
        scheduler.scheduleWithFixedDelay(new runner(), 0, 1, TimeUnit.SECONDS); 
        //或者用scheduler.scheduleAtFixedRate(new runner(),0,1, TimeUnit.SECONDS);

//接着我们要实现Runnable方法,也就是准时变动现在播放图片的ID

public class runner implements Runnable 
            { 
                public void run()

  {

// TODO Auto-generated method stub 
                    currIndex = (currIndex+1)%bitmapId.length; 
                    bofang.this.postInvalidate();//刷新屏幕 
               } 
            }

(0)

相关推荐

  • Android ViewPager实现Banner循环播放

    问题的起源 在项目里,有时候需要实现一个图片轮播的效果,用来展示Banner.同时,图片能循环播放,下面还有一排小圆点来指示当前轮播到哪一页了. 如下图: 分析 · 图片的个数是会变化的,同时小圆点的个数也会跟着图片个数变化 · 每一个page的布局是一样的.变化的就是小圆点的个数,所以需要用代码来动态生成小圆点 编码 布局 首先完成 MainActivity 的布局 activity_main.xml <RelativeLayout xmlns:android="http://schem

  • Android编程实现VideoView循环播放功能的方法

    本文实例讲述了Android编程实现VideoView循环播放功能的方法.分享给大家供大家参考,具体如下: package com.hangcheng; import com.example.bdcustomer_demo.R; import com.hangcheng.view.MyVideoView; import android.app.Activity; import android.media.MediaPlayer; import android.os.Bundle; import

  • Android 使用ViewPager实现图片左右循环滑动自动播放

    ViewPager这个小demo实现的是可以左右循环滑动图片,下面带索引,滑到最后一页在往右滑动就要第一页,第一页往左滑动就到最后一页,先上效果图,用美女图片是我一贯的作风,呵呵 1. 首先看一些layout下的xml <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_

  • Android实现基于ViewPager的无限循环自动播放带指示器的轮播图CarouselFigureView控件

    最近用到需要无限轮播自动播放的轮播轮播图,网上感觉都有这样那样的问题,于是自己写了一个通用的控件CarouselFigureView. 特点: 1.可以轮播view可以自己定义,不一定是要是ImageView2.指示器默认显示,但是可以隐藏3.可以设置指示器的颜色.间距.大小 4.有基础的可以自己修改代码改变指示器位置,这个应该不难5.可以自己开启和关闭自动轮播,开启轮播的时候可以设置轮播时间间隔,默认3000毫秒 我们先来看看效果图: 然后来看看使用代码 xml代码 <?xml version

  • Android 实现通知消息水平播放、无限循环效果

    今天我们来实现一个简单的效果,通知消息无限循环播放,先看效果图: 这个效果也很常见,实现的方法也有很多,我是使用RecyclerView来实现的,觉得还是挺不错的,就写下来分享给大家. 下面先看我们的布局文件main.xml,里面主要是一个RecyclerView: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.andr

  • Android ViewPager循环播放广告实例详解

    Android  实现ViewPager循环播放广告条实例详解 我们经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环的效果.看到那样的效果,相信大家都会想到ViewPager,但是ViewPager并不支持循环翻页,所以要实现循环还得需要自己去动手.最后还有一个问题就是翻页到最后一页如何平滑过渡到首页的问题.这些都源于有人私信问我ViewPager广告条如何平滑过渡的问题,出于这个问题,我想着亲自实现并分享下吧,本篇就是为了解决这些问题而写的. 1.初始化布局

  • Android实现图片循环播放的实例方法

    很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片.下面我们来看一下具体的实现方法.首先,我们需要在XML...    很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片.下面我们来看一下具体的实现方法. 首先,我们需要在XML文件中配置一下将要播放图片的控件(main.xml): 复制代码 代码如下: <?xml version="1.0" encoding="utf-8"?> <LinearL

  • android 简单图片动画播放的实例代码

    xml中: 复制代码 代码如下: <ImageView            android:id="@+id/touchview"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:layout_alignParentLeft="true"  

  • iOS 用Swipe手势和动画实现循环播放图片示例

    主要想法 添加3个ImageView展示图片,实现图片的无限循环. 使用Swipe手势识别用户向右或向左滑动图片. 使用CATransition给ImageView.layer添加动画,展示图片更换的效果. 实现 在storyboard添加三个UIImageView,用来展示图片.而数组imageArray则用来保存图片对象. @interface ViewController () @property (strong, nonatomic) IBOutlet UIImageView *midd

  • Android实现Banner界面广告图片循环轮播(包括实现手动滑动循环)

    前言:经常会看到有一些app的banner界面可以实现循环播放多个广告图片和手动滑动循环.本以为单纯的ViewPager就可以实现这些功能.但是蛋疼的事情来了,ViewPager并不支持循环翻页.所以要实现循环还得需要自己去动手.自己在网上也找了些例子,本博文的Demo是结合自己找到的一些相关例子的基础上去改造,也希望对读者有用. Demo实现的效果图如下: Demo代码: 工程目录如下图: 废话不多说,上代码. 1.主Activity代码如下: package com.stevenhu.and

  • javascript实现图片循环渐显播放的方法

    本文实例讲述了javascript实现图片循环渐显播放的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: <html> <title>图片的循环渐显播放效果代码</title> <head> <!--1.将下面的代码插入到HEML的<head></head>之间: --> <script language=javaScript> <!--// sandra0 = new Image()

  • Android ViewPager中显示图片与播放视频的填坑记录

    ViewPager介绍 ViewPager的功能就是可以使视图滑动,就像Lanucher左右滑动那样. ViewPager用于实现多页面的切换效果,该类存在于Google的兼容包android-support-v4.jar里面. ViewPager: 1)ViewPager类直接继承了ViewGroup类,所有它是一个容器类,可以在其中添加其他的view类. 2)ViewPager类需要一个PagerAdapter适配器类给它提供数据. 3)ViewPager经常和Fragment一起使用,并且

  • Android使用自定义属性实现图片自动播放滚动的功能

    大家好,记得上次我带着大家一起实现了一个类似与淘宝客户端中带有的图片滚动播放器的效果,但是在做完了之后,发现忘了加入图片自动播放的功能(或许是我有意忘记加的.....),结果图片只能通过手指滑动来播放.于是今天我将再次带领大家,添加上之前遗漏的功能,让我们的图片播放器更加完善. 这次的程序开发将完全基于上一次的代码,如果有朋友还未看过上篇文章,请先阅读Android实现图片滚动和页签控件功能的实现代码. 既然是要加入自动播放的功能,那么就有一个非常重要的问题需要考虑.如果当前已经滚动到了最后一张

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

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

随机推荐