是否有可能从资产文件夹加载drawable?

你可以加载assets (而不是可绘制文件夹)文件夹中的子目录的绘图?

希望这个帮助:

 Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null); 

我build议使用这个

  Drawable.createFromResourceStream(resources,new TypedValue(), resources.getAssets().open(filename), null) 

它返回正确的缩放drawable感谢资源…

是的,您可以使用createFromStream()方法从InputStream创build一个Drawable对象。

这里有一个静态方法来从资产中获取drawable。 它也closuresinputstream。

 import android.content.Context; import android.graphics.drawable.Drawable; import java.io.IOException; import java.io.InputStream; /** * Created by bartburg on 4-11-2015. */ public class AssetsReader { public static Drawable getDrawableFromAssets(Context context, String url){ Drawable drawable = null; InputStream inputStream = null; try { inputStream = context.getAssets().open(url); drawable = Drawable.createFromStream(inputStream, null); } catch (IOException e) { e.printStackTrace(); } finally { if(inputStream != null) { try { inputStream.close(); } catch (IOException e) { e.printStackTrace(); } } } return drawable; } } 

这是为你做的这个function。

检查返回的Drawablevariables是否为null,如果path无效或存在IOException,则返回null。

 public static Drawable getDrawableFromAssetFolder(String fullPath, Activity ctx) { Drawable d =null; try { d = Drawable.createFromStream(ctx.getAssets().open(fullPath), null); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return d; } 

这有助于获得正确的密度

 private Drawable drawableFromAssetFilename(String filename) { AssetManager assetManager = mApplicationContext.getAssets(); InputStream inputStream = null; try { inputStream = assetManager.open(filename); } catch (IOException e) { e.printStackTrace(); } Bitmap bitmap = BitmapFactory.decodeStream(inputStream); BitmapDrawable drawable = new BitmapDrawable(mApplicationContext.getResources(), bitmap); return drawable; } 

在这个版本中你不能,如果你在你的可绘制文件夹中创build一个子文件夹,你不能在你的xml文件中使用它,当你使用android:src的时候它将不会被识别。

看看这个线程: Android的可绘制目录是否可以包含子目录?