2011-02-02 21 views
11

アセットフォルダからLinearLayoutのbackGround Imageを設定しているときに問題に直面しています。androidのアセットフォルダから背景画像を設定するには?

String filePath="file:///android_asset/images/test.png"; 
    Drawable d = Drawable.createFromPath(filePath); 
    frontTextView.setBackgroundDrawable(d); 

誰かが私を助けることができますか?

+0

問題が何ですか。アプリがクラッシュしていますか?ところで、なぜ 'res/drawable'フォルダの代わりにassetフォルダを使用していますか? –

+0

Linearlayoutの背景を動的に変更する必要があるため、何も表示されません。res/drawableは使用できません。 – Altaf

+0

本当に、他の目的のためにassetフォルダが必要かもしれませんが、 'res/drawable'フォルダだけを使って背景を動的に変更することができます:' setBackgroundResource(R.id.bg1); setBackgroundResource(R.id.bg2) ' –

答えて

16

[OK]を、ケース他の誰であなたは資産である画像からビューの背景を設定する場合は、この非常に問題で、ここでつまずく:

Drawable d = Drawable.createFromStream(getAssets().open(path_in_assets), null); 

、その後は唯一の背景としてドローアブルをサポートし、いくつかのビューに設定します。

+0

私はあなたがそれを単一のライナーにしたことが好きです:) –

8

私が知っている限り、you cannot access assets directlyはあなたが試みているようです。データを資産として保存する場合は、AssetManagerクラスを使用してデータを取得する必要があります。 Here's a pretty decent blog postはリソースと資産について少し説明していますが、正式な文書ももちろん良いリソースです。

可能な限り、私はまた、(上記のリンクのブログ記事でもこれを論じ)背景画像のようなものが一般的に最高のres/drawableに保存されているとR.drawable.*スタイルを使用してアクセスしていること、しかし、追加します。しかし、あなたが提供するコードサンプルからこのようにする必要があるのは本当に明確ではありません。だから、それは最終的にはあなたの呼び出しだと思います。

2

EDIT:が追加されたInputStreamからイメージを作成...

私はのImageButtonを使用して同様の問題がありました。私は資産からビットマップを読み込んでImageButtonのイメージとして使用することでそれを理解しました。おそらく良いアプローチではなく、私の問題を解決して解決しています - サブフォルダを描画可能ディレクトリに持ち、ファイル名に許可されていない文字を持つことができない。

(はい、私が代わりにサブディレクトリの接頭辞を使用して、パターンに一致するファイルの名前を変更(小文字のみと数字)、私はおそらく、後でそれを行いますすることができます。)

InputStream is = null; 
try { 
    is = this.getResources().getAssets().open("Images/Fruits/Apple.png"); 
} catch (IOException e) { 
    Log.w("EL", e); 
} 

Bitmap image = BitmapFactory.decodeStream(is); 

ImageButton ib2 = (ImageButton) findViewById(R.id.imageButton2); 
ib2.setImageBitmap(image); 
+0

いいですが、 'image'変数はどこから来ましたか?おそらくあなたは何とか 'それは'からそれを得るのだろうか? –

+0

入力ストリームから画像を作成できます。 ビットマップイメージ= BitmapFactory.decodeStream(is); – CoPLaS