導航:首頁 > 源碼編譯 > imageloader源碼

imageloader源碼

發布時間:2023-02-07 15:21:38

java 跳棋的程序 急~~

先導入三個按鈕圖片
正常顯示的圖片"Begin1.jpg"
滑鼠移動到按鈕上時顯示的圖片"Begin2.jpg"
按下滑鼠時顯示的圖片"Begin1.jpg"
final ImageLoader imageBegin1 = new ImageLoader(sShell.getDisplay(), "Begin1.jpg");
final ImageLoader imageBegin2 = new ImageLoader(sShell.getDisplay(), "Begin2.jpg");
final ImageLoader imageBegin3 = new ImageLoader(sShell.getDisplay(),"Begin1.jpg");
創建按鈕
lblBegin = new Label(parent, SWT.NO_BACKGROUND);
lblBegin.setImage(imageBegin1.getImage());
lblBegin.setBounds(70, 40, 75, 38);
為按鈕各事件寫入代碼
lblBegin.addMouseTrackListener(new MouseTrackAdapter() {
public void mouseEnter(MouseEvent e) { //滑鼠移動到按鈕上方
lblBegin.setImage(imageBegin2.getImage());
}
public void mouseExit(MouseEvent e) { //滑鼠從按鈕上方移開
lblBegin.setImage(imageBegin1.getImage());
}
});
lblBegin.addMouseListener(new MouseAdapter() {
public void mouseDown(MouseEvent e) {
if (e.button == 1) {//按下滑鼠左鍵
lblBegin.setImage(imageBegin3.getImage()); //在這里寫入單擊事件代碼
}
}
public void mouseUp(MouseEvent e) {
if (e.button == 1) {//釋放滑鼠左鍵
lblBegin.setImage(imageBegin2.getImage());

}
}

});

如圖所示,當X坐標為1時,Y的坐標只能為5,當X坐標為2時,Y的坐標可以5或6。於是我們建立一個數組:
final static private int[][] pos = {
{5,5}, //X坐標為1,Y的上限是5,下限是5
{5,6}, //X坐標為2,Y的上限是5,下限是6
{5,7}, //X坐標為3,Y的上限是5,下限是7
{5,8}, //X坐標為4,Y的上限是5,下限是8
{1,13}, //X坐標為5,Y的上限是1,下限是13
{2,13}, //6
{3,13}, //7
{4,13}, //8
{5,13}, //9
{5,14}, //10
{5,15}, //11
{5,16}, //12
{5,17}, //13
{10,13}, //14
{11,13}, //15
{12,13}, //16
{13,13}, //17
};
在Position類中IsLegalPosition函數可以確定一個坐標是否合法
public static boolean IsLegalPosition(int x, int y) {
if ((x < 1) || (x > 17)) {
return false;
}
if ((y < pos[x - 1][0]) || (y > pos[x - 1][1])) {
return false;
}
return true;
}

3. 棋盤類(ChessBoard)中棋子和坐標的索引關系
棋盤中所有Chess集合
private Chess[] chesses = null;//所有棋子對象都保存這個數組當中
下面函數可以根據索引號返回棋子對象
public Chess getChess(int index) {
return chesses[index];
}
棋子和坐標的對應關系
private Position[] chessesPosition = null;//所有棋子坐標都保存在這個數組當中
下面函數可以根據棋子對象或棋子索引號返回坐標
public Position getPosition(Chess chess) {
return chessesPosition[chess.getindex()];
}

public Position getPosition(int index) {
return chessesPosition[index];
}
坐標和棋子的對應關系
private Chess[][] chessesIndex = new Chess[17][17];//數組保存了17*17個棋子對象指針
下面函數可以根據棋子坐標返回該位置上的棋子,如果沒有棋子返回Null
public Chess getChess(Position position) {
if (position == null){
return null;
}
return chessesIndex[position.getx() - 1][position.gety() - 1];
}

❷ universal imageloader 怎麼修改源碼

android Universal Image Loader 源碼分析
本文為 Android 開源項目源碼解析 中 Android Universal Image Loader 部分
項目地址:Android-Universal-Image-Loader,分析的版本:eb794c3,Demo 地址:UIL Demo
分析者:huxian99,校對者:Grumoon、Trinea,校對狀態:完成
1. 功能介紹
1.1 Android Universal Image Loader
Android Universal Image Loader 是一個強大的、可高度定製的圖片緩存,本文簡稱為UIL。
簡單的說 UIL 就做了一件事——獲取圖片並顯示在相應的控制項上。
1.2 基本使用
1.2.1 初始化
添加完依賴後在Application或Activity中初始化ImageLoader,如下:
public class YourApplication extends Application {

@Override
public void onCreate() {
super.onCreate();
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
// 添加你的配置需求
.build();
ImageLoader.getInstance().init(configuration);
}
}

其中 configuration 表示ImageLoader的配置信息,可包括圖片最大尺寸、線程池、緩存、下載器、解碼器等等。
1.2.2 Manifest 配置
<manifest>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<application
android:name=".YourApplication"
…… >
……
</application>
</manifest>

添加網路許可權。如果允許磁碟緩存,需要添加寫外設的許可權。
1.2.3 下載顯示圖片
下載圖片,解析為 Bitmap 並在 ImageView 中顯示。
imageLoader.displayImage(imageUri, imageView);

下載圖片,解析為 Bitmap 傳遞給回調介面。
imageLoader.loadImage(imageUri, new SimpleImageLoadingListener() {
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
// 圖片處理
}
});

以上是簡單使用,更復雜 API 見本文詳細設計。
1.3 特點
可配置度高。支持任務線程池、下載器、解碼器、內存及磁碟緩存、顯示選項等等的配置。
包含內存緩存和磁碟緩存兩級緩存。
支持多線程,支持非同步和同步載入。
支持多種緩存演算法、下載進度監聽、ListView 圖片錯亂解決等。
2. 總體設計
2.1. 總體設計圖

上面是 UIL 的總體設計圖。整個庫分為ImageLoaderEngine,Cache及ImageDownloader,ImageDecoder,BitmapDisplayer,BitmapProcessor五大模塊,其中Cache分為MemoryCache和DiskCache兩部分。
簡單的講就是ImageLoader收到載入及顯示圖片的任務,並將它交給ImageLoaderEngine,ImageLoaderEngine分發任務到具體線程池去執行,任務通過Cache及ImageDownloader獲取圖片,中間可能經過BitmapProcessor和ImageDecoder處理,最終轉換為Bitmap交給BitmapDisplayer在ImageAware中顯示。
2.2. UIL 中的概念
簡單介紹一些概念,在4. 詳細設計中會仔細介紹。
ImageLoaderEngine:任務分發器,負責分發LoadAndDisplayImageTask和ProcessAndDisplayImageTask給具體的線程池去執行,本文中也稱其為engine,具體參考4.2.6 ImageLoaderEngine.java。
ImageAware:顯示圖片的對象,可以是ImageView等,具體參考4.2.9 ImageAware.java。
ImageDownloader:圖片下載器,負責從圖片的各個來源獲取輸入流, 具體參考4.2.22 ImageDownloader.java。
Cache:圖片緩存,分為MemoryCache和DiskCache兩部分。
MemoryCache:內存圖片緩存,可向內存緩存緩存圖片或從內存緩存讀取圖片,具體參考4.2.24 MemoryCache.java。
DiskCache:本地圖片緩存,可向本地磁碟緩存保存圖片或從本地磁碟讀取圖片,具體參考4.2.38 DiskCache.java。
ImageDecoder:圖片解碼器,負責將圖片輸入流InputStream轉換為Bitmap對象, 具體參考4.2.53 ImageDecoder.java。
BitmapProcessor:圖片處理器,負責從緩存讀取或寫入前對圖片進行處理。具體參考4.2.61 BitmapProcessor.java。
BitmapDisplayer:將Bitmap對象顯示在相應的控制項ImageAware上, 具體參考4.2.56 BitmapDisplayer.java。
LoadAndDisplayImageTask:用於載入並顯示圖片的任務, 具體參考4.2.20 LoadAndDisplayImageTask.java。
ProcessAndDisplayImageTask:用於處理並顯示圖片的任務, 具體參考4.2.19 ProcessAndDisplayImageTask.java。
DisplayBitmapTask:用於顯示圖片的任務, 具體參考4.2.18 DisplayBitmapTask.java。
3. 流程圖

上圖為圖片載入及顯示流程圖,在uil庫中給出,這里用中文重新畫出。
4. 詳細設計
4.1 類關系圖

4.2 核心類功能介紹
4.2.1 ImageLoader.java
圖片載入器,對外的主要 API,採取了單例模式,用於圖片的載入和顯示。
主要函數:
(1). getInstance()
得到ImageLoader的單例。通過雙層是否為 null 判斷提高性能。
(2). init(ImageLoaderConfiguration configuration)
初始化配置參數,參數configuration為ImageLoader的配置信息,包括圖片最大尺寸、任務線程池、磁碟緩存、下載器、解碼器等等。
實現中會初始化ImageLoaderEngine engine屬性,該屬性為任務分發器。
(3). displayImage(String uri, ImageAware imageAware, DisplayImageOptions options, ImageLoadingListener listener, ImageLoadingProgressListener progressListener)
載入並顯示圖片或載入並執行回調介面。ImageLoader 載入圖片主要分為三類介面:
displayImage(…) 表示非同步載入並顯示圖片到對應的ImageAware上。
loadImage(…) 表示非同步載入圖片並執行回調介面。
loadImageSync(…) 表示同步載入圖片。
以上三類介面最終都會調用到這個函數進行圖片載入。函數參數解釋如下:
uri: 圖片的 uri。uri 支持多種來源的圖片,包括 http、https、file、content、assets、drawable 及自定義,具體介紹可見ImageDownloader。
imageAware: 一個介面,表示需要載入圖片的對象,可包裝 View。
options: 圖片顯示的配置項。比如載入前、載入中、載入失敗應該顯示的占點陣圖片,圖片是否需要在磁碟緩存,是否需要在內存緩存等。
listener: 圖片載入各種時刻的回調介面,包括開始載入、載入失敗、載入成功、取消載入四個時刻的回調函數。
progressListener: 圖片載入進度的回調介面。
函數流程圖如下:

4.2.2 ImageLoaderConfiguration.java
ImageLoader的配置信息,包括圖片最大尺寸、線程池、緩存、下載器、解碼器等等。
主要屬性:
(1). Resources resources
程序本地資源訪問器,用於載入DisplayImageOptions中設置的一些 App 中圖片資源。
(2). int maxImageWidthForMemoryCache
內存緩存的圖片最大寬度。
(3). int maxImageHeightForMemoryCache
內存緩存的圖片最大高度。
(4). int maxImageWidthForDiskCache
磁碟緩存的圖片最大寬度。
(5). int maxImageHeightForDiskCache
磁碟緩存的圖片最大高度。
(6). BitmapProcessor processorForDiskCache
圖片處理器,用於處理從磁碟緩存中讀取到的圖片。
(7). Executor taskExecutor
ImageLoaderEngine中用於執行從源獲取圖片任務的 Executor。
(18). Executor taskExecutorForCachedImages
ImageLoaderEngine中用於執行從緩存獲取圖片任務的 Executor。
(19). boolean customExecutor
用戶是否自定義了上面的 taskExecutor。
(20). boolean customExecutorForCachedImages
用戶是否自定義了上面的 taskExecutorForCachedImages。
(21). int threadPoolSize
上面兩個默認線程池的核心池大小,即最大並發數。
(22). int threadPriority
上面兩個默認線程池的線程優先順序。
(23). QueueProcessingType tasksProcessingType
上面兩個默認線程池的線程隊列類型。目前只有 FIFO, LIFO 兩種可供選擇。
(24). MemoryCache memoryCache
圖片內存緩存。
(25). DiskCache diskCache
圖片磁碟緩存,一般放在 SD 卡。
(26). ImageDownloader downloader
圖片下載器。
(27). ImageDecoder decoder
圖片解碼器,內部可使用我們常用的BitmapFactory.decode(…)將圖片資源解碼成Bitmap對象。
(28). DisplayImageOptions defaultDisplayImageOptions
圖片顯示的配置項。比如載入前、載入中、載入失敗應該顯示的占點陣圖片,圖片是否需要在磁碟緩存,是否需要在內存緩存等。
(29). ImageDownloader networkDeniedDownloader
不允許訪問網路的圖片下載器。
(30). ImageDownloader slowNetworkDownloader
慢網路情況下的圖片下載器。
4.2.3 ImageLoaderConfiguration.Builder.java 靜態內部類
Builder 模式,用於構造參數繁多的ImageLoaderConfiguration。
其屬性與ImageLoaderConfiguration類似,函數多是屬性設置函數。
主要函數及含義:
(1). build()
按照配置,生成 ImageLoaderConfiguration。代碼如下:
public ImageLoaderConfiguration build() {
();
return new ImageLoaderConfiguration(this);
}

(2). ()
初始化值為null的屬性。若用戶沒有配置相關項,UIL 會通過調用DefaultConfigurationFactory中的函數返回一個默認值當配置。
taskExecutorForCachedImages、taskExecutor及ImageLoaderEngine的taskDistributor的默認值如下:

parameters
taskDistributor
taskExecutorForCachedImages/taskExecutor

corePoolSize 0 3
maximumPoolSize Integer.MAX_VALUE 3
keepAliveTime 60 0
unit SECONDS MILLISECONDS
workQueue SynchronousQueue LIFOLinkedBlockingDeque / LinkedBlockingQueue
priority 5 3
diskCacheFileNameGenerator默認值為HashCodeFileNameGenerator。
memoryCache默認值為LruMemoryCache。如果內存緩存不允許緩存一張圖片的多個尺寸,則用FuzzyKeyMemoryCache做封裝,同一個圖片新的尺寸會覆蓋緩存中該圖片老的尺寸。
diskCache默認值與diskCacheSize和diskCacheFileCount值有關,如果他們有一個大於 0,則默認為LruDiskCache,否則使用無大小限制的UnlimitedDiskCache。
downloader默認值為BaseImageDownloader。
decoder默認值為BaseImageDecoder。
詳細及其他屬性默認值請到DefaultConfigurationFactory中查看。
(3). ()
設置內存緩存不允許緩存一張圖片的多個尺寸,默認允許。
後面會講到 View 的 getWidth() 在初始化前後的不同值與這個設置的關系。
(4). diskCacheSize(int maxCacheSize)
設置磁碟緩存的最大位元組數,如果大於 0 或者下面的maxFileCount大於 0,默認的DiskCache會用LruDiskCache,否則使用無大小限制的UnlimitedDiskCache。
(5). diskCacheFileCount(int maxFileCount)
設置磁碟緩存文件夾下最大文件數,如果大於 0 或者上面的maxCacheSize大於 0,默認的DiskCache會用LruDiskCache,否則使用無大小限制的UnlimitedDiskCache。
4.2.4 ImageLoaderConfiguration.NetworkDeniedImageDownloader.java 靜態內部類
不允許訪問網路的圖片下載器,實現了ImageDownloader介面。
實現也比較簡單,包裝一個ImageDownloader對象,通過在 getStream(…) 函數中禁止 Http 和 Https Scheme 禁止網路訪問,如下:
@Override
public InputStream getStream(String imageUri, Object extra) throws IOException {
switch (Scheme.ofUri(imageUri)) {
case HTTP:
case HTTPS:
throw new IllegalStateException();
default:
return wrappedDownloader.getStream(imageUri, extra);
}
}

4.2.5 ImageLoaderConfiguration.SlowNetworkImageDownloader.java 靜態內部類
慢網路情況下的圖片下載器,實現了ImageDownloader介面。
通過包裝一個ImageDownloader對象實現,在 getStream(…) 函數中當 Scheme 為 Http 和 Https 時,用FlushedInputStream代替InputStream處理慢網路情況,具體見後面FlushedInputStream的介紹。
4.2.6 ImageLoaderEngine.java
LoadAndDisplayImageTask和ProcessAndDisplayImageTask任務分發器,負責分發任務給具體的線程池。
主要屬性:
(1). ImageLoaderConfiguration configuration
ImageLoader的配置信息,可包括圖片最大尺寸、線程池、緩存、下載器、解碼器等等。
(2). Executor taskExecutor
用於執行從源獲取圖片任務的 Executor,為configuration中的 taskExecutor,如果為null,則會調用DefaultConfigurationFactory.createExecutor(…)根據配置返回一個默認的線程池。
(3). Executor taskExecutorForCachedImages
用於執行從緩存獲取圖片任務的 Executor,為configuration中的 taskExecutorForCachedImages,如果為null,則會調用DefaultConfigurationFactory.createExecutor(…)根據配置返回一個默認的線程池。
(4). Executor taskDistributor
任務分發線程池,任務指LoadAndDisplayImageTask和ProcessAndDisplayImageTask,因為只需要分發給上面的兩個 Executor 去執行任務,不存在較耗時或阻塞操作,所以用無並發數(Int 最大值)限制的線程池即可。
(5). Map cacheKeysForImageAwares
ImageAware與內存緩存 key 對應的 map,key 為ImageAware的 id,value 為內存緩存的 key。
(6). Map uriLocks
圖片正在載入的重入鎖 map,key 為圖片的 uri,value 為標識其正在載入的重入鎖。
(7). AtomicBoolean paused
是否被暫停。如果為true,則所有新的載入或顯示任務都會等待直到取消暫停(為false)。
(8). AtomicBoolean networkDenied
是否不允許訪問網路,如果為true,通過ImageLoadingListener.onLoadingFailed(…)獲取圖片,則所有不在緩存中需要網路訪問的請求都會失敗,返回失敗原因為網路訪問被禁止。
(9). AtomicBoolean slowNetwork
是否是慢網路情況,如果為true,則自動調用SlowNetworkImageDownloader下載圖片。
(10). Object pauseLock

❸ Android實現圖庫功能,查看本應用drawable下的所有圖片,且能左右滑動切換上一頁或下一頁圖片

使用ImageLoader
源碼地址
https://github.com/nostra13/Android-Universal-Image-Loader
可以通過這個框架來載入以下類型的圖片
"http://site.com/image.png" // from Web
"file:///mnt/sdcard/image.png" // from SD card
"file:///mnt/sdcard/video.mp4" // from SD card (video thumbnail)
"content://media/external/images/media/13" // from content provider
"content://media/external/video/media/13" // from content provider (video thumbnail)
"assets://image.png" // from assets
"drawable://" + R.drawable.img // from drawables (non-9patch images)

官網有例子,使用非常簡單,一行代碼搞定

❹ img src 圖片預覽的問題 附源碼

瀏覽器安全性已經大大提高,要實現圖片上傳預覽不是那麼簡單了

不過有很多變通或先進的方法來實現

例如ie7/ie8的濾鏡預覽法,firefox3的getAsDataURL方法

具體可以參考這個圖片上傳預覽效果

閱讀全文

與imageloader源碼相關的資料

熱點內容
怎麼查看域伺服器名稱 瀏覽:775
如何把蘋果的視頻傳到安卓手機 瀏覽:612
介面伺服器怎麼使用 瀏覽:62
蘋果怎麼實現安卓全面屏手勢 瀏覽:977
拳皇97最強宏命令 瀏覽:921
linux安裝svn查看 瀏覽:850
內置函數計算絕對值python 瀏覽:88
千聊免費課程可以重新加密嗎 瀏覽:507
python能代替php嗎 瀏覽:252
phpexcel樣式 瀏覽:265
安卓手機有沒有什麼軟體可以阻止彈廣告的 瀏覽:306
linux區域網搭建伺服器 瀏覽:690
python編譯器mac 瀏覽:293
windows的doc命令 瀏覽:463
nfc全加密門禁卡 瀏覽:636
身份信息被加密 瀏覽:482
我的鹽城app怎麼添加不了家庭成員 瀏覽:493
php商城並發 瀏覽:348
熊貓繪畫app怎麼做出大佬的筆刷 瀏覽:603
雲存儲伺服器知識 瀏覽:461