android手机开发之实现图片循环播放
很多时候,我们需要展示在客户端展示图片,而且是动态显示,即不停地自行切换图片。下面我们来看一下具体的实现方法。
首先,我们需要在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。
代码如下 | 复制代码 |
code of bofang.java: import android.content.Context;
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() }.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 } |
好了,到这里就全部完成了!
PS:这里要说明一下,上面的代码中其实有些地方还有更好的实现方法。
比如:
我们为了实现定时更改要播放的图片的ID,以实现循环播放,新开了了一个线程,并且开了一个死循环,但实际这样的写法可控性很低,JDK的java.util.concurrent中提供了大量的方法去控制一段代码定时执行,标准的改写上面的代码如下:
代码如下 | 复制代码 |
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); //接着我们要实现Runnable方法,也就是定时更改目前播放图片的ID public class runner implements Runnable { // TODO Auto-generated method stub |