怎么自己做網(wǎng)站地圖北京做網(wǎng)頁(yè)的公司
目錄
一,Android資源分類
1.使用res目錄下的資源
res目錄下資源的使用:
2.使用assets目錄下的資源
assets目錄下的資源的使用:
二,glide圖片加載框架
1.glide簡(jiǎn)介
?2.下載和設(shè)置
3.基本用法
?4.占位符(Placeholders)
?5.轉(zhuǎn)換(Transformations)
?6.緩存策略(Caching Strategies)
一,Android資源分類
????????Android應(yīng)用中用到的各種用戶自定義資源(包括字符串、顏色值、布局等)都集中放到res目錄(或assets)下,以實(shí)現(xiàn)Android應(yīng)用MVC分離的目的,而應(yīng)用程序可以直接使用這些資源。Android中這些資源分為兩類:可直接訪問資源和不可直接訪問資源;
可直接訪問資源:即可以使用R類資源訪問的資源,放在res目錄下;
不可直接訪問資源:無法直接訪問的原生資源,放在assets目錄下,只能通過AssetManager來處理;
1.使用res目錄下的資源
res目錄下可使用的資源有:
res子目錄 | 可以存放的資源 |
anim | 定義補(bǔ)間動(dòng)畫的xml文件 |
drawable | 各種位圖文件(png、jpg、gif、9-Patch)可以編譯成drawable對(duì)象的xml文件 |
mipmap | 應(yīng)用程序launcher圖標(biāo) |
layout | 用戶界面布局文件 |
menu | 菜單資源布局文件(選項(xiàng)菜單,子菜單,上下文菜單) |
raw | 任意類型的原生資源 |
values | 各種常量資源的xml文件(顏色,字符串,長(zhǎng)度,主題等) |
xml | 其它任意的XML文件(可能沒有特殊意義的XML文件) |
res目錄下資源的使用:
(1)在其他資源文件中使用res目錄下的資源:@[<pack_name>:]<res_type>/<res_name>,例如使用mimap包下的圖片pic:@mipmap/pic;
<ImageViewandroid:id="@+id/img_netImg"android:layout_width="wrap_content"android:layout_height="wrap_content"android:src="@mipmap/pic"/>
(2)在java代碼中使用res目錄下的資源:[<pack_name>.]R.res_type.res_name,最常見的便是oncreate方法中的setContentView加載布局方法,傳入的參數(shù)便是layout布局xml文件:
@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);
}
2.使用assets目錄下的資源
????????assets目錄下也可以添加Android應(yīng)用中所使用的資源,這些資源可以是任意格式的,且可以位于assets目錄中的任意位置。 assets目錄中可以建立子目錄,建立更靈活的目錄結(jié)構(gòu)。 assets目錄中的文件格式是任意的,不一定必須是XML文件。
????????assets/目錄下的文件與res/raw/目錄下文件區(qū)別:(1)assets/目錄下文件不會(huì)被R類索引,即assets/目錄下資源不能使用Resources對(duì)象獲取。 (2)assets/目錄下資源不會(huì)被打包到APK中,即assets目錄中適合存放過大的文件。
assets目錄下的資源的使用:
????????assets目錄下的資源不會(huì)被R類處理,一般是通過getAssets()方法獲得AssetManager對(duì)象,然后再加載指定資源。
AssetManager assetManager = getAssets();
AssetManager對(duì)象中的常用方法:
方法名 | 描述 |
String[] list(String path) | 以字符串?dāng)?shù)組的形式返回path目錄下的所有文件(若path為空,則表示asets目錄) |
InputStream open(String filename) | 打開指定filename表示的文件流,返回該輸入流 |
XmlResourceParser openXmlResourceParser(String filename) | 從assets目錄下的fileName文件中加載XML解析器 |
void close() | 關(guān)閉當(dāng)前AssetManager對(duì)象 |
?示例,訪問assets目錄下的圖片:
private void getAssetsImage() {AssetManager assetManager = getAssets();//獲取Assetmanager對(duì)象try {InputStream inputStream = assetManager.open("pic2.png");//獲取圖片文件輸入流Bitmap bitmap = BitmapFactory.decodeStream(inputStream);//封裝成bitmap對(duì)象img_assets.setImageBitmap(bitmap);//給控件設(shè)置圖片} catch (IOException e) {throw new RuntimeException(e);}
}
二,glide圖片加載框架
1.glide簡(jiǎn)介
????????Glide是一個(gè)快速高效的Android圖片加載庫(kù),注重于平滑的滾動(dòng)。 Glide提供了易用的API,統(tǒng)一了顯示本地圖片和網(wǎng)絡(luò)圖片的接口。
Glide使用了多個(gè)步驟來確保在Android上加載圖片盡可能的快速和平滑:
- 自動(dòng)、智能地下采樣(downsampling)和緩存(caching),以最小化存儲(chǔ)開銷和解碼次數(shù);
- 積極的資源重用,例如字節(jié)數(shù)組和Bitmap,以最小化昂貴的垃圾回收和堆碎片影響;
- 深度的生命周期集成,以確保僅優(yōu)先處理活躍的Fragment和Activity的請(qǐng)求,并有利于應(yīng)用在必要時(shí)釋放資源以避免在后臺(tái)時(shí)被殺掉;
?2.下載和設(shè)置
glide源碼地址:GitHub - bumptech/glide: An image loading and caching library for Android focused on smooth scrolling
glide的下載:在build.gradle的dependencies添加依賴:implementation 'com.github.bumptech.glide:glide:4.13.2',然后在彈出的提示框中點(diǎn)擊同步即可自動(dòng)下載。
設(shè)置權(quán)限:在AndroidManifest.xml文件中設(shè)置權(quán)限;
(1)訪問網(wǎng)絡(luò)權(quán)限:
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
(2)從本地文件夾或 DCIM 或圖庫(kù)中加載圖片的權(quán)限:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
(3)將 Glide 的緩存存儲(chǔ)到SD 卡上的權(quán)限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
3.基本用法
glide只需用三個(gè)api就可實(shí)現(xiàn)對(duì)本地圖片和網(wǎng)絡(luò)圖片的訪問:
- with():參數(shù)可以是上下文,Activity,Fragment,FragmentActivity;
- load():參數(shù)可以是本地圖片地址,網(wǎng)絡(luò)圖片url,bitmap,drawable對(duì)象,圖片文件等;
- into():指定圖片在哪個(gè)imageView中顯示;
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif")//網(wǎng)絡(luò)圖片url.into(img_netImg);
}
?4.占位符(Placeholders)
????????當(dāng)我們加載圖片時(shí),并不只有加載成功一種情況,為帶給用戶良好體驗(yàn),在沒有加載成功時(shí),我們應(yīng)給用戶一些反饋,Glide允許用戶指定三種不同類型的占位符,分別在三種不同場(chǎng)景使用:
- placeholder():設(shè)置圖片加載完成之前的狀態(tài);
- error():設(shè)置圖片加載失敗的狀態(tài);
- fallback():設(shè)置圖片為空(null)時(shí)的狀態(tài);
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif").placeholder(R.mipmap.loading)//設(shè)置圖片加載完成之前的狀態(tài).error(R.mipmap.error)//設(shè)置圖片加載失敗的狀態(tài).fallback(R.mipmap.nullpic)//設(shè)置圖片為空的狀態(tài).into(img_netImg);
}
?5.轉(zhuǎn)換(Transformations)
????????有時(shí),我們需要對(duì)圖片進(jìn)行一些修改,在Glide中,Transformations 可以獲取資源圖片并修改它,然后返回被修改后的資源。通常轉(zhuǎn)換操作是用來完成剪裁或?qū)ξ粓D應(yīng)用過濾器。
glide提供了很多內(nèi)置的轉(zhuǎn)換,包括:
- CenterCrop:縮放圖片以滿足ImageView的尺寸,超過ImageView的部分將會(huì)被裁剪掉,因此最終圖片可能不完全顯示;
- FitCenter:保持原圖片的比例進(jìn)行縮放,直到可以在ImageView中尺寸區(qū)域內(nèi)完全顯示圖片。圖片能夠完全顯示,比例保持不變,但是可能圖片無法完全覆蓋ImageView的區(qū)域;
- CircleCrop:以最大的內(nèi)切圓裁剪圖片,一般在設(shè)置頭像時(shí)使用;
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif").circleCrop()//設(shè)置圖片為圓形.into(img_netImg);
}
?6.緩存策略(Caching Strategies)
????????使用glide加載過的圖片會(huì)被緩存起來,通過diskCacheStrategy()方法可以設(shè)置緩存策略,glide提供了以下五種緩存策略:
- DiskCacheStrategy.AUTOMATIC:默認(rèn)緩存,根據(jù)圖片資源自動(dòng)選擇緩存策略
- DiskCacheStrategy.ALL:緩存原始圖片和轉(zhuǎn)換后的圖片
- DiskCacheStrategy.DATA:只緩存原始圖片
- DiskCacheStrategy.RESOURCE:只緩存轉(zhuǎn)換后的圖片
- DiskCacheStrategy.NONE:不緩存
private void getNetImg() {Glide.with(this).load("https://i0.hdslb.com/bfs/article/38aad4e7c4ca2048b95aa6659fb1fcaf43d0f597.gif").diskCacheStrategy(DiskCacheStrategy.ALL)//緩存全部.into(img_netImg);
}