最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

android studio 常用圖片處理,大量加載圖片的內(nèi)存處理,壓縮等等

2023-06-14 13:26 作者:翼618  | 我要投稿

圖片緩存? 這個比較特殊?

//圖片存儲

? ? private void saveBitmapToSharedPreferences(Bitmap bitmap){

//? ? ? ? Bitmap bitmap=BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher);

? ? ? ? //第一步:將Bitmap壓縮至字節(jié)數(shù)組輸出流ByteArrayOutputStream

? ? ? ? ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();

? ? ? ? bitmap.compress(Bitmap.CompressFormat.PNG, 80, byteArrayOutputStream);

? ? ? ? //第二步:利用Base64將字節(jié)數(shù)組輸出流中的數(shù)據(jù)轉(zhuǎn)換成字符串String

? ? ? ? byte[] byteArray=byteArrayOutputStream.toByteArray();

? ? ? ? String imageString=new String(Base64.encodeToString(byteArray, Base64.DEFAULT));

? ? ? ? //第三步:將String保持至SharedPreferences

? ? ? ? SharedPreferences sharedPreferences=getSharedPreferences("testSP", Context.MODE_PRIVATE);

? ? ? ? SharedPreferences.Editor editor=sharedPreferences.edit();

? ? ? ? editor.putString("image", imageString);

? ? ? ? editor.commit();

? ? }


//? ? 拿 圖片緩存

? ?private void getBitmapFromSharedPreferences(){

? ? ? ? SharedPreferences sharedPreferences= getSharedPreferences("testSP", Context.MODE_PRIVATE);

? ? ? ? //第一步:取出字符串形式的Bitmap

? ? ? ? String imageString=sharedPreferences.getString("image", "");

? ? ? ? //第二步:利用Base64將字符串轉(zhuǎn)換為ByteArrayInputStream

? ? ? ? byte[] byteArray=Base64.decode(imageString, Base64.DEFAULT);

? ? ? ? ByteArrayInputStream byteArrayInputStream=new ByteArrayInputStream(byteArray);

? ? ? ? //第三步:利用ByteArrayInputStream生成Bitmap

? ? ? ? Bitmap bitmap=BitmapFactory.decodeStream(byteArrayInputStream);


? ? ? ? if (bitmap == null) {

? ? ? ? ?bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.portrait);

? ? ? ? }else{

? ? ? ? ? ? ivHead.setImageBitmap(bitmap);

? ? ? ? }

? ? }

-----------------------我是分割線------------------------------


設(shè)置本地圖片為bitmap

?Bitmap rawBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);

? 切換圖片

?messageImage.setImageResource(R.drawable.message_selected);


android 網(wǎng)絡(luò)url轉(zhuǎn)bitmap


注意:該方法必須要在子線程中調(diào)用,因為涉及網(wǎng)絡(luò)請求

public Bitmap getBitmap(String url) {??

? ? ? ? Bitmap bm = null;??

? ? ? ? try {??

? ? ? ? ? ? URL iconUrl = new URL(url);??

? ? ? ? ? ? URLConnection conn = iconUrl.openConnection();??

? ? ? ? ? ? HttpURLConnection http = (HttpURLConnection) conn;??

? ? ? ? ? ? ??

? ? ? ? ? ? int length = http.getContentLength();??

? ? ? ? ? ? ??

? ? ? ? ? ? conn.connect();??

? ? ? ? ? ? // 獲得圖像的字符流??

? ? ? ? ? ? InputStream is = conn.getInputStream();??

? ? ? ? ? ? BufferedInputStream bis = new BufferedInputStream(is, length);??

? ? ? ? ? ? bm = BitmapFactory.decodeStream(bis);??

? ? ? ? ? ? bis.close();??

? ? ? ? ? ? is.close();// 關(guān)閉流??

? ? ? ? }??

? ? ? ? catch (Exception e) {??

? ? ? ? ? ? e.printStackTrace();??

? ? ? ? }??

? ? ? ? return bm;??

? ? }??

-----------------------我是分割線------------------------------

imageView? 常用屬性設(shè)置


等比例縮放圖片? ?重要

android:adjustViewBounds="true"


控制為了使圖片適合 ImageView 的大小,應(yīng)該如何變更圖片大小或移動圖片。一定是下列常量之一:

android:scaleType

常量值描述:

matrix

用矩陣來繪圖

fitXY

拉伸圖片(不按比例)以填充View的寬高

fitStart

按比例拉伸圖片,拉伸后圖片的高度為View的高度,且顯示在View的左邊

fitCenter

按比例拉伸圖片,拉伸后圖片的高度為View的高度,且顯示在View的中間

fitEnd

按比例拉伸圖片,拉伸后圖片的高度為View的高度,且顯示在View的右邊

center

按原圖大小顯示圖片,但圖片寬高大于View的寬高時,截圖圖片中間部分顯示

centerCrop

按比例放大原圖直至等于某邊View的寬高顯示。

centerInside

當原圖寬高或等于View的寬高時,按原圖大小居中顯示;反之將原圖縮放至View的寬高居中顯示。

(譯者注:設(shè)置圖片的填充方式。)


往下推的神技!

? ? <ImageView

? ? ? ? android:paddingBottom="140dp"

? ? ? ? android:scaleType="centerCrop"

? ? ? ? android:layout_width="match_parent"

? ? ? ? android:layout_height="100dp"

? ? ? ? android:src="@drawable/huck" />



-----------------------我是分割線------------------------------



下面介紹一個常用的圖片加載庫Glide,可以極大的優(yōu)化加載的內(nèi)存,而且合并處理狠很多東西,同時加載圖片越多,越能體現(xiàn)價值,可以在android里面看到內(nèi)存的波動情況


Glide 的一個優(yōu)勢:緩存

Glide 的緩存實現(xiàn)是基于 Picasso,當加載圖片時,Glide 使用3個來源:內(nèi)存,磁盤和網(wǎng)絡(luò)(從最快到最慢排序)。 他還可以加載動態(tài)圖片


glide 在程序入口里面 有一個初始化配置 配置了他的話 就可以不用做緩存操作之類的

使用要先導(dǎo)包

compile 'com.github.bumptech.glide:glide:+'


加載網(wǎng)絡(luò)圖片

ImageView targetImageView = (ImageView) findViewById(R.id.imageView);

String internetUrl = "http://i.imgur.com/DvpvklR.png";

Glide .with(context)?

? .load(internetUrl)?

? .into(targetImageView);



// 加載本地圖片

File file = new File(getExternalCacheDir() + "/image.jpg");

Glide.with(this).load(file).into(imageView);


// 加載應(yīng)用資源

int resource = R.drawable.image;

Glide.with(this).load(resource).into(imageView);


// 加載二進制流

byte[] image = getImageBytes();

Glide.with(this).load(image).into(imageView);


// 加載Uri對象

Uri imageUri = getImageUri();

Glide.with(this).load(imageUri).into(imageView);


????更多設(shè)置用法

?.placeholder(R.drawable.loading) // 站位圖?

? .error(R.drawable.error)加載圖片失敗時顯示的圖片

Glide.with(this)

? ? ?.load(url)

? ? ?.placeholder(R.drawable.loading)

? ? ?.diskCacheStrategy(DiskCacheStrategy.NONE)

? ? ?.into(imageView);


Glide.with(this)

? ? ?.load(url)

? ? ?.placeholder(R.drawable.loading)

? ? ?.error(R.drawable.error)

? ? ?.diskCacheStrategy(DiskCacheStrategy.NONE)

? ? ?.into(imageView);




這里在load()方法的后面加入了一個asBitmap()方法,這個方法的意思就是說這里只允許加載靜態(tài)圖片,不需要Glide去幫我們自動進行圖片格式的判斷了。

Glide.with(this)

? ? ?.load(url)

? ? ?.asBitmap()

? ? ?.placeholder(R.drawable.loading)

? ? ?.error(R.drawable.error)

? ? ?.diskCacheStrategy(DiskCacheStrategy.NONE)

? ? ?.into(imageView);




這里調(diào)用了asGif()方法替代了asBitmap()方法,?強制動態(tài)圖片

Glide.with(this)

? ? ?.load(url)

? ? ?.asGif()

? ? ?.placeholder(R.drawable.loading)

? ? ?.error(R.drawable.error)

? ? ?.diskCacheStrategy(DiskCacheStrategy.NONE)

? ? ?.into(imageView);



//這個文件可能不存在于你的設(shè)備中。然而你可以用任何文件路徑,去指定一個圖片路徑。

File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), "Running.jpg");

Glide .with(context) .load(file) .into(imageViewFile);


占位符和漸現(xiàn)動畫

Glide 的流式接口只需要調(diào)用 .placeHolder()用一個 drawable(resource) 引用,Glide 將會顯示它作為一個占位符,直到你的實際圖片準備好。


? Glide?

? ? ? .with(context)?

? ? ? .load(UsageExampleListViewAdapter.eatFoodyImages[0])

? ? ? .placeholder(R.mipmap.ic_launcher) // 也可以是一個drawable?

? ? ? .into(imageViewPlaceholder);



Glide?

? ? .with(context)?

? ? .load("http://futurestud.io/non_existing_image.png")?

? ? .placeholder(R.mipmap.ic_launcher) // 也可以是一個drawable?

? ? .error(R.mipmap.future_studio_launcher) // 如果圖片不能加載就會顯示

? ? .into(imageViewError);



Glide?

? ? .with(context)?

? ? .load(UsageExampleListViewAdapter.eatFoodyImages[0])

? ? .override(600, 200) // 重新改變圖片大小成這些尺寸(像素).不關(guān)心長寬比

? ? .into(imageViewResize);



Glide.with(this)

? ? ?.load(url)

? ? ?.placeholder(R.drawable.loading)

? ? ?.error(R.drawable.error)

? ? ?.diskCacheStrategy(DiskCacheStrategy.NONE)

? ? ?.override(100, 100) //設(shè)置圖片大小 并非是view大小

? ? ?.into(imageView);



/**設(shè)置實體圖片 加緩存 待測試*/

Glide.with(context)

.load(file)

.diskCacheStrategy(DiskCacheStrategy.NONE)// 緩存所有尺寸的圖片

.into(holder.img1);



顯示 Gif


檢查圖片加載的是否是一個gif圖片,調(diào)用一個額外的防區(qū)強制 Glide變成一個 Gif asGif()

String gifUrl = "http://i.kinja-img.com/gawker-media/image/upload/s--B7tUiM5l--/gf2r69yorbdesguga10i.gif";

Glide?

? ? .with( context )?

? ? .load( gifUrl )?

? ? .asGif()?

? ? .error( R.drawable.full_cake )?

? ? .into( imageViewGif );



android studio 常用圖片處理,大量加載圖片的內(nèi)存處理,壓縮等等的評論 (共 條)

分享到微博請遵守國家法律
普宁市| 信宜市| 桐柏县| 米易县| 和政县| 云阳县| 桐梓县| 读书| 河西区| 望都县| 都安| 佛教| 邹平县| 永善县| 武汉市| 红安县| 定陶县| 淅川县| 全州县| 常州市| 高青县| 康保县| 上虞市| 永清县| 田东县| 蒲江县| 武山县| 额敏县| 咸宁市| 敦化市| 临漳县| 平利县| 胶州市| 垦利县| 道孚县| 黑河市| 特克斯县| 武强县| 巴中市| 锡林浩特市| 衡阳市|