導航:首頁 > 操作系統 > androididdrawable

androididdrawable

發布時間:2022-11-12 16:40:13

android 判斷資源id是color還是drawable

findViewById是我們獲取layout中各種View 對象比如按鈕、標簽、ListView和ImageView的便利方法。顧名思義,它需要一個int參數:資源id。
資源id非常有用。Android回自動為每個位於res目錄下的資源分配id,包括各種圖片文件、xml文中的」@+id」對象。res的子目錄幾乎總是固定的,比如每次都能見到的:drawable-xxxx、layout、values,以及不常見的:anim、xml、row、color。
Android教科書上告訴你:
res/drawable/用來存放圖片文件;
res/layout/用來存放布局定義文件;
res/values/用來存放一些變數、參數等文件。
這都是我們已經知道的。此外,Android會為res目錄下的所有資源分配id,其主要的分配原則是:
drawable中的圖片文件總是每個文件一個資源id。
Xml文件中每個使用android:id=」@+id/xxx」的view都會被分配一個未用的資源id。
其他更復雜的規則也許每個人都會補充一些。
在 ADK 的API 中,有許多方法其實都會使用資源id作為參數,比如 getDrawable 方法 :
getResources().getDrawable(R.drawable.sendsms_bk));
從字面上看,getResouces方法返回一個android.content.res.Resources對象。
getDrawalbe方法返回一個Drawable對象,我們知道這就是一張圖片。
getDrawable方法使用的參數就是資源id。
但是,這些int型的資源id到底是些什麼數字?或者它們都放在哪裡。如果你夠細心,你可以在gen目錄的R.java文件中找到它們。每個16進制整型id都有一個很O-O 的屬性名字,它們都是public static final的,建議你不要手動去修改它們。這些資源id位於不同類層次結構中,你仔細看一看,會發現其中的一些規律,比如,drawable類中包含資源id其實代表了res/drawable目錄中的圖片文件;layout類中包含的資源id其實是代表了在res/layout目錄中的xml文件 ;id類中包含的資源id其實是代表了布局xml文件中使用了 android:id=」@+id/xxx」的widget對象——當然如果你使用的是」@+Tyre/xxx」,則Android編譯時會在R.java 中創建一個叫做 Tyre 的類。
通過上面的了解,我們發現資源id就是以「R.」開頭的變數或屬性——因為它都定義在R類中——這個類跟android.R不是同一個R,它們不在同一個包層次中。前者是定義了android框架自己的資源,比如:android.R.layout.simple_expandable_list_item_1、android.R.layout.simple_expandable_list_item_2。這些資源你使用過嗎?有時間不妨試試。而另一個R就是我們自己的R了,定義了我們自己的資源id。我們可以用面向對象的R.xxx.yyy的方式使用資源id,當然也可以直接用16進制數來使用它們。
資源id在Android中是如此重要,因此我們只要獲得了資源id,即可獲得資源。因為某些情況下,我們不能使用某個常量作為資源id(因為我們想用一個變數代替它),所以只能採用兩種方式動態獲取資源id:
1、反射
java的反射是如此強大,以至於我們在走投無路時總是想起它。我們來看一段代碼:
try{
Field field=R.drawable.class.getField(type);
int i= field.getInt(new R.drawable());
Log.d(tag,i+"");
return i;
}catch(Exception e){
Log.e(tag,e.toString());
return R.drawable.unknow;
}
type是一個變數,他的可能值會是「close」、「edit」、「icon」等。我們通過java的反射類Field 去訪問 R.drawable 類下面的某個欄位。實際上,我們知道在R.drawable 下的欄位就是 res.drawable-xxxx 目錄下的圖片文件的資源id。因此運行上面的這段代碼,其實就是通過一個字元串去獲取對應圖片文件的資源id。比如,當 type 的值為「icon」時,上面的代碼會獲得res.drawable-xxxx目錄下的 icon.png 圖片文件的資源id並返回給我們。我們通過資源 id 來把圖片顯示在ImageView中就是順理成章的事了。
2、使用Resources 類的 getIdentifier方法
使用反射畢竟還是麻煩。如果同樣的事情用 android.content.res.Resources 類來干,就是兩句話而已:
Resources res=getResources();
return res.getIdentifier(type,"drawable",getPackageName());
getResources方法是來自於contenxt(也就是Activity類),它直接可以返回一個Resouces對象。而Resouces的getIdentifier方法可以返回R.java中的任何資源id,當然,你必須指定3個參數:欄位名,類名,包名。包名指定了的 全限定名的包名部分,如果R 的全限定名為 android.R 或者 com.company.R,則包名在這里就是「android」或「com.company」。getPackageName其實是this.getPackageName(),它直接返回本類的包名。
類名則是資源所屬的類。比如我們知道的,在R.java 類中的幾個固定的類:drawable、id、string、layout等,在它們下邊又定義了許多資源id。
欄位名則是資源id的名字。比如這個資源id定義: public static final int del=0x7f020002;
del就是一個資源id的名字,0x7f020002則是它的16進制值。
通過3個參數,getIdentifier 方法就可以通過比較動態的方式獲得資源id。

Ⅱ android 怎麼獲取控制項的id

控制項的id是自己在xml中定義的, 可以通過R.id.來得到, 如果是view的話,可以直接調用view.getId()即可得到該ID了

Ⅲ 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,想獲取這個對象裡面的Drawable應該使用那個方法

Drawable drawable=getResource().getDrawable(R.drawable.xxx);

這個例子來源於android學習手冊,360手機助手中可以下載,裡面有108個android例子,源碼文檔都可在裡面看,下面是截圖


方式一:

已將圖片保存到drawable目錄下,通過圖片id獲得Drawable或者Bitmap,此方式最常用。(若只知道圖片的名稱,還可以通過圖片的名稱獲得圖片的id)

(1)通過圖片id獲得Drawable

Drawable drawable=getResource().getDrawable(R.drawable.xxx);

(2)通過圖片id獲得Bitmap

Resource res=gerResource();

Bitmap bitmap=BitmapFactory.decodeResource(res, id);

(3)通過圖片的名稱獲得圖片的id(兩種方法)

int id =res.getIdentifier(name, defType, defPackage); //name:圖片的名,defType:資源類型(drawable,string。。。),defPackage:工程的包名

Drawable drawable=getResource().getDrawable(id);

方式二:

已將圖片保存到assest目錄下,知道圖片的名稱,通過inputstream獲得圖片Drawabl

或者 Bitmap

AssetManager asm=getAssetMg();

InputStream is=asm.open(name);//name:圖片的名稱

(1)獲得Drawable

Drawable da = Drawable.createFromStream(is, null);

(2)獲得Bitmap

Bitmap bitmap=BitmapFactory.decodeStream(is);

方式三: 圖片保存在sdcard,通過圖片的路徑h

/圖片路徑

String imgFilePath = Environment.getExternalStorageDirectory().toString()

+ 「/DCIM/device.png」;

Ⅳ android 系統內置的按鈕點擊效果的id是什麼。。。是在drawable裡面嗎

你說的一同內置點擊效果是歸Theme管的,在AndroidManifest.xml里<application>標簽里android:theme="@android:style/Theme.XXX"(多種樣式可選),如果你手機的效果與原生不同,而你又想要你手機的那種就應該選android:theme="@android:style/Theme.DeviceDefault"

Ⅵ android 怎麼生成drawable

通過 Resources 類來獲得項目資源 Resources res = getResources(); Drawable drawable = res.getDrawable(R.drawable.xxx); 二. 從 XML 文件來定義圖..Android中Drawable分類匯總_冶金/礦山/地質_工程科技_專業資料。Android中Drawable分類匯總And左可id把 制的對象抽象 D左awab從e, 的圖形圖像資源就代...

Ⅶ android 開發中R.drawable的問題

  1. 圖片放在res資源文件夾下的drawable文件夾下面,不過現在更多的把圖片放在mipmap文件夾里

  2. 設置背景的話兩種方法,一種在layout布局裡把圖片設為背景

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"

    android:id="@+id/root_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/ic_bg">

    </RelativeLayout>

  3. 第二種代碼裡面設置

    (RelativeLayout) bg = (RelativeLayout) findViewById(R.id.root_view);

    bg.setBackgroundResource(R.drawable.ic_bg);

Ⅷ android 獲取當前壁紙的Drawable對象或者Bitmap。如何獲取這張圖片的ID或者名稱。

如果圖片放在android的資源文件夾中,就用反射,獲取他的名字,然後自己去截取、反射應該懂吧。。如果不是,在本地的文件夾、就更簡單了,直接用文件獲取名字。如果不懂反射就M。。

Ⅸ Android Bitmap 與 Drawable之間的區別和轉換

Android bitmap和drawable的區別和轉換如下:

1.bitmap 轉換 drawable

Bitmapbitmap=newBitmap(...);Drawabledrawable=newBitmapDrawable(bitmap);
//Drawabledrawable=newFastBitmapDrawable(bitmap);

2.Drawable to Bitmap
BitmapDrawable, FastBitmapDrawable直接用getBitmap
b. 其他類型的Drawable用Canvas畫到一個bitmap上

Canvascanvas=newCanvas(bitmap)
drawable.draw(canvas);
Drawabled=ImagesList.get(0);Bitmapbitmap=((BitmapDrawable)d).getBitmap();

區別如下:

1.Bitmap - 稱作點陣圖,一般點陣圖的文件格式後綴為bmp,當然編碼器也有很多如RGB565、RGB888。作為一種逐像素的顯示對象執行效率高,但是缺點也很明顯存儲效率低。

2.Drawable - 作為Android平下通用的圖形對象,它可以裝載常用格式的圖像,比如GIF、PNG、JPG,當然也支持BMP,當然還提供一些高級的可視化對象,比如漸變、圖形等。

另外還有如下相類似的格式:

Canvas - 名為畫布,可以看作是一種處理過程,使用各種方法來管理Bitmap、GL或者Path路徑,同時它可以配合Matrix矩陣類給圖像做旋轉、縮放等操作,同時Canvas類還提供了裁剪、選取等操作。

Paint - 可以把它看做一個畫圖工具,比如畫筆、畫刷。管理了每個畫圖工具的字體、顏色、樣式。

閱讀全文

與androididdrawable相關的資料

熱點內容
dvd光碟存儲漢子演算法 瀏覽:758
蘋果郵件無法連接伺服器地址 瀏覽:963
phpffmpeg轉碼 瀏覽:672
長沙好玩的解壓項目 瀏覽:145
專屬學情分析報告是什麼app 瀏覽:564
php工程部署 瀏覽:833
android全屏透明 瀏覽:737
阿里雲伺服器已開通怎麼辦 瀏覽:803
光遇為什麼登錄時伺服器已滿 瀏覽:302
PDF分析 瀏覽:486
h3c光纖全工半全工設置命令 瀏覽:143
公司法pdf下載 瀏覽:383
linuxmarkdown 瀏覽:350
華為手機怎麼多選文件夾 瀏覽:683
如何取消命令方塊指令 瀏覽:350
風翼app為什麼進不去了 瀏覽:779
im4java壓縮圖片 瀏覽:362
數據查詢網站源碼 瀏覽:151
伊克塞爾文檔怎麼進行加密 瀏覽:893
app轉賬是什麼 瀏覽:163