麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > Android > 正文

Android實現圖片循環播放的實例方法

2020-04-11 12:24:14
字體:
來源:轉載
供稿:網友

很多時候,我們需要展示在客戶端展示圖片,而且是動態顯示,即不停地自行切換圖片。下面我們來看一下具體的實現方法。首先,我們需要在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();//刷新屏幕 
               } 
            }   

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 欧美一级黄色片在线观看 | 日韩激情在线视频 | 久久综合综合久久 | 91色爱 | 午夜精品福利在线观看 | v片在线看| 狠狠久久伊人中文字幕 | 欧美特级黄色 | 久久久久亚洲视频 | qyl在线视频精品免费观看 | 欧美wwwwww | 国产成人小视频在线观看 | 黄色av片在线观看 | 高清在线观看av | 国产在线观看 | 51色视频 | 国产美女视频黄a视频免费 日韩黄色在线播放 | 久久福利电影网 | 免费香蕉成视频成人网 | 伊人二本二区 | 国产免费成人 | 91成人免费视频 | 欧美精品一区二区三区在线 | 久久久久久久免费看 | 免费黄色大片在线观看 | 日韩在线毛片 | 激情大乳女做爰办公室韩国 | 欧美爱爱一区二区 | 久久精品视频12 | 欧美黄色一区 | 激情九九| 欧美性猛交xxx乱大交3蜜桃 | 日韩视频精品一区 | 日本一级黄色大片 | 精品一区二区久久久久久按摩 | 91av爱爱| 中文在线观看视频 | 免费在线观看成人av | 在线播放污 | 在线成人精品视频 | 免费毛片播放 |