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

lhy569714089

lhy569714089

2016-02-19 09:49

下面,图老师小编带您去了解一下Android实现图片循环播放的实例方法,生活就是不断的发现新事物,get新技能~

很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片。下面我们来看一下具体的实现方法。首先,我们需要在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;ibitmapId.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:这里要说明一下,下面的代码中其实有些地方还有更好的实现方法。

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)

    比如:

    我们为了实现准时变动要播放的图片的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();//刷新屏幕 
               } 
            }   

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/bianchengyuyan/)
展开更多 50%)
分享

猜你喜欢

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

编程语言 网络编程
Android实现图片循环播放的实例方法

Android 网络图片查看显示的实现方法

编程语言 网络编程
Android 网络图片查看显示的实现方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

WPS演示技巧:实现幻灯片循环播放

电脑入门
WPS演示技巧:实现幻灯片循环播放

Android图片处理实例介绍(图)

编程语言 网络编程
Android图片处理实例介绍(图)

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用超链接实现幻灯片循环播放

电脑入门
用超链接实现幻灯片循环播放

android Imageview 图片覆盖具体实现

编程语言 网络编程
android Imageview 图片覆盖具体实现

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

SQL 2005使用专用管理员连接(DAC)的技巧及修改系统表的方法

SQL 2005使用专用管理员连接(DAC)的技巧及修改系统表的方法

jsp 定制标签(Custom Tag)

jsp 定制标签(Custom Tag)
下拉加载更多内容 ↓