一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

android中利用ImageView 图片循环播放

时间:2013-04-26 编辑:简简单单 来源:一聚教程网

xml

 代码如下 复制代码


    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:id="@+id/linearLayout" >
 

主文件:

 代码如下 复制代码

public class picBarActivity extends Activity{
        private LinearLayout linearLayout;
        private picBar myView;
         
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.pic_progress);
                 
                linearLayout = (LinearLayout)this.findViewById(R.id.linearLayout);
                myView = new picBar(this);
                linearLayout.addView(myView);
        }
}

View文件:

 代码如下 复制代码


public class picBar extends View{          
 
        int COMPONENT_WIDTH;//控件的宽度  
        int COMPONENT_HEIGHT;//控件的高度  
        boolean initflag = false;//是否已经初始化图片  
        Bitmap[] bmp;//用来存放图片的数组  
        int currIndex = 0;//当前播放图片的ID  
        int[] bitmapId;//图片编号ID  
        boolean workFlag = true;//播放图片的线程标识位  
 
        public picBar(Context context) {
                super(context);
                 
                //首先,要播放图片,就先要有图片,那就先给各个图片编号吧,这里的图片资源存放在了res下的drawable文件夹下了  
                bitmapId =new int[]{R.drawable.loading1_03, R.drawable.loading2_03, R.drawable.loading3_03}; 
                 
                //好了,图片的编号现在已经搞定了,接下来该干什么呢?对,应该将资源里的图片塞进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  
                                        picBar.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                         bmp = BitmapFactory.decodeResource(res, bitmapId);  
                } 
        } 
 
        //覆写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;  
                } 
                Paint p = new Paint();
                canvas.drawBitmap(bmp[currIndex], 0, 0, p);//绘制图片  
        } 
 
}

热门栏目