android獲取drawable
⑴ 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)
官網有例子,使用非常簡單,一行代碼搞定
⑵ Android知識點——Glide獲取圖片寬高
先很負責任的說一下,這個內容也是網路來的,但是很不負責任的是,當初只記錄解決方案,忘了記錄是查看的哪篇博客了,這里先對不知道借鑒的誰表示感謝。無法分享鏈接,就厚著臉皮把(轉)字去掉了,請大家諒解。
先提供一下 Android知識點——目錄 的鏈接,然後讓我們進入正題。
實際上,這篇博客所說的內容並不是所有人都可以用到,畢竟大多數時候,我們只需要展示圖片,而並不需要知道圖片的寬高;有的時候我們只需要知道展示的寬高(即ImageView)的寬高,不需要知道圖片資源的實際尺寸。
但是需求千千萬萬嘛,以程序員的腦洞,怎麼能想到產品的腦洞究竟有多大呢?我這里就遇到了一個需求,那就是需要在一個可縮放的圖片上標注icon(類似地圖上的marker)。這還不算完,畢竟在找到的圖片縮放控制項 PhotoView 中,我們點擊到圖片上後,是有點擊點位在整個圖片上的百分比坐標回調的。而多端通過百分比是很容易就能在圖片中獲取到相同的點位,並回顯出對應的icon的(沒辦法,誰讓我找的是方便計算百分比的呢),結果Web端優先做了這部分功能,使用的是在原圖上的具體坐標。這樣我百分比的計劃自然就落空了,只能想辦法計算出具體的點位。
因此獲取圖片的原始尺寸就是一個必不可少的環節,我剛剛網路了一下,查到 wangke_king 的 Android獲取圖片的寬度和高度 中使用的方法是:
我這里沒有親測過,不過應該是沒有問題,但是很遺憾我們的需求是在網路圖片上做測量,所以這個方法也無法使用,不過如果其他有類似本地圖片需求的,不妨嘗試一下。而我之前找到的解決方案為:
首先說明,上述的方法是可以實現圖片的尺寸測量的,只是有一個小小的問題,那就是想要計算出Drawable的寬高,需要必須等到圖片載入完成之後,嘗試了使用view.post(),監聽組件載入完成,但是並不是每次都能獲取到Drawable的寬高,因此當初的解決方案是寫了個兩秒鍾的定時器,每50毫秒測量一次,直到獲取到值為止。這樣的解決方案可謂是相當無腦了,而且還要消耗很多不必要的資源。
還好皇天不負有心人啊,終於找到了通過Glide獲取圖片寬高的方式:
這樣我們就可以通過回調,在Glide將網路圖片注入到對應的圖片組件的時候,得到圖片的Bitmap,然後在通過Bitmap來獲取圖片的寬高。但是需要注意的一點是,Bitmap的泛型是需要手動去設置的哦。
另外SimpleTarget現在已經過時,暫時還沒有查到。我搜索過SimpleTarget過時使用什麼替換,有一些說法是使用BitmapImageViewTarget ,不過下面是實際測試結果。
圖片鏈接:
網路圖片-景色
測量結果:
圖片信息:
如果不是我使用有誤的話,BitmapImageViewTarget 是無法替換SimpleTarget ,實現測量圖片原始寬高的功能的。
⑶ android獲取drawable裡面的圖片的id和名字的方法
你好,看樣子你可能是剛接觸Android不久,我先就你想實現的問題給你解答。你問題的本質是要在ImageView上展示圖片,你需要理解以下幾點:
1、ImageView這個組件可以直接設置Bitmap和Drawable來展示圖片,方法分別是setImageBitmap()和setImageDrawable()
2、根據(1)我們需要使用Drawable,Drawable可以由drawable目錄里的圖片資源生成,在這之前你需要理解一個概念,我們向drawable目錄放入一張圖片是需要命名的,比如圖片名為sun.png,系統會幫助我們自動生成這個圖片的id,如果想在java代碼中引用這個圖片就需要使用這個id,使用方式:R.drawable.sun。
3、使用系統方法將圖片轉換為Drawable。
Drawable drawable = getResources().getDrawable(R.drawable.sun);
imageView.setImageDrawable(drawable);
這樣就可以將圖片顯示到ImageView上。
這裡面使用的getResources()方法獲取的Resources對象可以幫助我們獲取很多資源文件,這個方法可以直接在Activity里使用,在其他地方需要使用Context對象調用。此外,Resources的getDrawable方法已被標記為過時,系統推薦使用兩個參數的方法。getDrawable(int id, Theme theme),我們不需要設置Theme可以給null。
4、題外話
1)現在圖片資源已經很少放在drawable目錄里,而是放在mipmap目錄,引用方式R.mipmap.xxx
2)你的問題涉及到id和名字,名字是你把圖片放到目錄時自己起的,命名要符合規范。而id則是由系統自動幫你生成,且是固定格式:R.drawable.xxx
⑷ android studio中的drawable-v24怎麼創建
我們一般將APP的icon放在minmap文件夾下,其他圖片資源放在drawable文件夾下。下面我們看下AndroidStudio下如何創建drawable、drawable-hdpi、drawable-mdpi、drawable-xhdpi、drawable-xxhdpi。
1、切換到Project視圖下,找到對應moudle的res文件夾,右擊「res」--》 「new」--》「Android resource directory」,彈出「New Resource Directory」對話框。
2、按照上圖的一二三步驟,點擊第三步後,會出現一下內容,選擇要添加drawable的解析度,點擊「ok」按鈕即可。
⑸ drawable是什麼意思
drawable是Android中的一個概念,可翻譯為「可繪制資源」。它是指一類保存在應用資源文件中,可以用來展示圖片、顏色、形狀等具體內容的資源,這些資源可以通過代碼進行訪問和操作。最常見的就是用drawable來展示應用程序的圖標和背景。drawable資源文件可以使用xml或圖片格式存儲,而且可以針對不同的設備屏幕密度使用不同的drawable資源文件。
在Android中,開發者可以通過XML或Java代碼來設置可繪制資源。在XML中,可以通過添加一個drawable的屬性值來設置View或布局的背景,例如設置一個Button的背景,在XML中可以添加以下代碼:android:background="@drawable/my_button_bg";在Java代碼中,可以使用Drawable類來訪問可繪制資源文件並使用它們來設置View的背景或其他方面。
使用drawable作為應用程序資源的優勢是可以為不同的設備提供適當的資源解析度。在Android中,不同的設備具有不同的屏幕密度,開發人員可以通過使用drawable資源來根據屏幕密度提供不同的圖像質量,從而提供更好的用戶體驗。此外,使用drawable還可以很好地組織和管理應用程序的內容。因為drawable資源可以存儲在單個文件夾中,開發人員可以輕松地組織、分類和管理應用程序的各種資源。
⑹ android 如何將drawable中的圖片保存到系統相冊中
android 將drawable中的圖片保存到系統相冊中的原理比較簡單,獲取到的bitmap,然後通過的compress方法寫到一個fileoutputstream中. 再通知MediaScannerService有圖片文件加入就可以了.
保存圖片的核心代碼如下:
Bitmap bitmap= BitmapFactory.decodeResource(getResources(), R.drawable.icon);
MediaStore.Images.Media.insertImage(context.getContentResolver(), bitmap, name, "");
或者
FileOutputStream fos = openFileOutput("image", Context.MODE_PRIVATE);
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
//發送系統通知消息
context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://" + Environment.getExternalStorageDirectory())));
另一種方法是直接使用文件流讀寫:
InputStream is = mContext.getResources().openRawResource(PicID);
FileOutputStream fos = new FileOutputStream(LogoFilePath);
byte[] buffer = new byte[8192];
int count = 0;
while((count=is.read(buffer)) > 0)
{
fos.write(buffer, 0, count);
}
fos.close();
is.close();
這里要注意目錄許可權問題:在應用程序AndroidManifest.xml中的manifest節點中加入android:sharedUerId="android.uid.system"這個屬性。然後放在源碼環境中編譯,並通過adb install 的方式進行安裝。mk文件中的屬性改為LOCAL_CERTIFICATE :=platform。