日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

【Android学习】图片

發布時間:2024/3/13 Android 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Android学习】图片 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1,ImageView(圖片視圖)

1)概念

ImageView繼承自View組件,它的主要功能是用于顯示圖片,且任何Drawable對象都可使用ImageView來顯示。

Android中不僅可以將擴展名為.png,.jpg,.gif的普通圖片作為圖片資源,而且可以將擴展名為.9.png的9-Patch圖片作為圖片資源。擴展名為.png,.jpg,.gif的普通圖片較為常見,他們通常是通過繪圖軟件完成的。而9-Patch圖片是通過使用Android SDK中的提供的工具Draw 9-patch生成的。那為什么要使用9-Patch這種圖片呢?原因是:與普通圖片不同,使用9-Patch圖片作為屏幕或按鈕的背景時,當屏幕的尺寸或按鈕的大小改變時,圖片可自動縮放,達到不失真的效果。

2)屬性

--scaleType 設置圖片的填充方式,相關方法setScaleType(ImageView.ScaleType)

ImageView.ScaleType / android:scaleType值:
CENTER /center 按圖片的原來size居中顯示,當圖片長/寬超過View的長/寬,則截取圖片的居中部分顯示
CENTER_CROP / centerCrop 按比例擴大圖片的size居中顯示,使得圖片長(寬)等于或大于View的長(寬)
CENTER_INSIDE / centerInside 將圖片的內容完整居中顯示,通過按比例縮小或原來的size使得圖片長/寬等于或小于View的長/寬
FIT_CENTER / fitCenter 把圖片按比例擴大/縮小到View的寬度,居中顯示
FIT_END / fitEnd 把圖片按比例擴大/縮小到View的寬度,顯示在View的下部分位置
FIT_START / fitStart 把圖片按比例擴大/縮小到View的寬度,顯示在View的上部分位置
FIT_XY / fitXY 把圖片不按比例擴大/縮小到View的大小顯示
MATRIX / matrix 用矩陣來繪制,動態縮小放大圖片來顯示。
ImageView

--adjustViewBounds 調整邊框時是否保持可繪制對象的寬高比,相關方法setAdjustViewBounds(boolean) --src 設置要顯示的Drawable對象的ID ,相關方法setImageResource(int) --android:maxHeight 設置ImageView的最大高度,相關方法setMaxHeight(int)

2,圖片加載

1)大量圖片加載慢

按需加載,不需要的釋放。
必要時做一個存放圖片地址的映射數組,這樣圖片刪掉了也可以從數組里面取對應的路徑。

2)加載大圖片

android系統給圖片分配的內存只有8M,當加載大量圖片時往往會出現OOM。
①盡量不要使用setImageBitmap或setImageResource或BitmapFactory.decodeResource來設置一張大圖
這些函數在完成decode后,最終都是通過java層的createBitmap來完成的,需要消耗更多內存,可以通過BitmapFactory.decodeStream方法,創建出一個bitmap,再將其設為ImageView的 source
②使用BitmapFactory.Options對圖片進行壓縮

InputStream is = this.getResources().openRawResource(R.drawable.pic1);BitmapFactory.Options options=new BitmapFactory.Options();options.inJustDecodeBounds = false;options.inSampleSize = 10; //width,hight設為原來的十分一Bitmap btp =BitmapFactory.decodeStream(is,null,options);

③運用Java軟引用,進行圖片緩存,將需要經常加載的圖片放進緩存里,避免反復加載
及時銷毀不再使用的Bitmap對象

if(!bmp.isRecycle() ){bmp.recycle() //回收圖片所占的內存system.gc() //提醒系統及時回收}

3)圖片選擇器

GitHub:ImagePicker
使用步驟:
①引入依賴。

public static final int REQUEST_CODE_SELECT = 100; public static final int REQUEST_CODE_PREVIEW = 101; private ArrayList<ImageItem> selImageList = new ArrayList<>(); //當前選擇的所有圖片

②初始化ImagePicker。

private void initImagePicker() {ImagePicker imagePicker = ImagePicker.getInstance();imagePicker.setImageLoader(new GlideImageLoader()); //設置圖片加載器imagePicker.setShowCamera(true); //顯示拍照按鈕imagePicker.setCrop(true); //允許裁剪(單選才有效)imagePicker.setSaveRectangle(true); //是否按矩形區域保存imagePicker.setSelectLimit(maxImgCount); //選中數量限制imagePicker.setStyle(CropImageView.Style.RECTANGLE); //裁剪框的形狀imagePicker.setFocusWidth(800); //裁剪框的寬度。單位像素(圓形自動取寬高最小值)imagePicker.setFocusHeight(800); //裁剪框的高度。單位像素(圓形自動取寬高最小值)imagePicker.setOutPutX(1000); //保存文件的寬度。單位像素imagePicker.setOutPutY(1000); //保存文件的高度。單位像素 }

③跳轉。

//打開選擇,本次允許選擇的數量(通過maxImgCount控制一次選擇照片的數量) ImagePicker.getInstance().setSelectLimit(maxImgCount); Intent intent1 = new Intent(this, ImageGridActivity.class); /* 如果需要進入選擇的時候顯示已經選中的圖片, * 詳情請查看ImagePickerActivity * */ startActivityForResult(intent1, REQUEST_CODE_SELECT);

④onActivityResult方法回調

if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {//添加圖片返回if (data != null && requestCode == REQUEST_CODE_SELECT) {images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);if (images != null) {selImageList.clear();selImageList.addAll(images);ImageItem imageItem = selImageList.get(0);//imageItem.path為地址 Glide.with(this)//context.load(userImage)//uri.placeholder(R.mipmap.icon_cover_default)//占位圖(不可用于CircleImageView圖片的加載).error(R.drawable.nmtittle)//錯誤圖.into(myTitleImage);//ImageView控件}}} else if (resultCode == ImagePicker.RESULT_CODE_BACK) {//預覽圖片返回if (data != null && requestCode == REQUEST_CODE_PREVIEW) {images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_IMAGE_ITEMS);if (images != null) {selImageList.clear();selImageList.addAll(images);ImageItem imageItem = selImageList.get(0); ImagePicker.getInstance().getImageLoader().displayImage(this, imageItem.path, IV_photo, 0, 0);//IV_photo為要顯示圖片的控件}}}

⑤導入ClideImageLoader(圖片加載器)。

4)background

①background屬性

對于src,圖片不會拉伸。
如果以background,圖片會根據View的寬度進行拉伸,解決方案是:

如下xml文件:tv_background.xml,放于drawable文件夾中。

<?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android"android:src="@drawable/toolbar_bg"android:tileMode="disabled" android:gravity="top" > </bitmap>

可以之間被 android:background使用,且圖片不會出現拉伸。
注意:此方案可以把大圖片放小,但無法把小圖片放大。筆者暫時沒有找到可以把bitmap適配于大屏手機的辦法。來個大大指教下!

②setBackgroundResource、setBackground比較

功能相同,區別在于效率。
對于使用頻率比較高的,從xm讀取資源相當于一次IO,可提前通過getResources()存儲,然后每次直接使用即可。

playBtn.setBackgroundResource(R.drawable.pause_selecor); playBtn.setBackgroundDrawable(myContext.getResources().getDrawable(R.drawable.pause_selecor););

5)在不壓縮的情況下加載高清大圖

使用BitmapRegionDecoder進行布局加載。

3,Bitmap的加載和Cache

4,Drawable

5,drawableLeft、drawableRight、drawableTop、drawableBottom

1)xml設置

android:drawablePadding="5dp" android:drawableRight="@drawable/icon_new"

2)java設置

//void android.widget.TextView.setCompoundDrawables(Drawable left, Drawable top, Drawable right, Drawable bottom) Drawable mDrawable = getResources().getDrawable(drawable); mDrawable.setBounds(0, 0, mDrawable.getMinimumWidth(), mDrawable.getMinimumHeight()); btn_Left.setCompoundDrawables(mDrawable, null, null, null);

3)圖片點擊

①點擊圖片切換決定et_password顯示的密碼是明文還是密文。

@Overridepublic boolean onTouch(View v, MotionEvent event) {switch (v.getId()) {case R.id.act_login_et_password:// et.getCompoundDrawables()得到一個長度為4的數組,分別表示左右上下四張圖片Drawable drawable = et_password.getCompoundDrawables()[2];//如果右邊沒有圖片,不再處理if (drawable == null)return false;//如果不是按下事件,不再處理if (event.getAction() != MotionEvent.ACTION_UP)return false;if (event.getX() > et_password.getWidth()- et_password.getPaddingRight()- drawable.getIntrinsicWidth()){isChecked = !isChecked;if(isChecked){et_password.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD);}else{et_password.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);}}break;default:break;}return false;}

6,實踐

1)圖片分辨率

H 分辨率480*800
XH 分辨率1280*720
XXH 分辨率1920*1080

在Android studio 中,自定義圖片放在drawable中,切圖根據分辨率不同,放在mipmap文件夾中(可以自適應屏幕)。

2)屏幕分辨率自適應

①組件大小:權重(layout_weight)、具體像素(dip)
②圖片:drawable-hdpi、.9.png圖片
③AndroidManifest.xml

<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity = "true"/>

android:anyDensity值為true,系統會依據屏幕密度,自動去找對應的文件夾。
如果drawable-hpdi中有高密度圖片,其它兩個文件夾中沒有對應圖片資源,那么系統會去加載drawable-hdpi中的資源。

3)Tab

①tab切換底部線條動畫

方案:
TextView設置切換2種背景。
shape寫的只有底部有橫線的圖形:

<?xml version="1.0" encoding="utf-8"?> <layer-list xmlns:android="http://schemas.android.com/apk/res/android"><item android:top="-2dp"android:right="-2dp"android:left="-2dp"><shape><solid android:color="@android:color/transparent"/><stroke android:width="1dp"android:color="@color/red"/></shape></item></layer-list>

總結

以上是生活随笔為你收集整理的【Android学习】图片的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。