是否有可能从资产文件夹加载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的可绘制目录是否可以包含子目录?