Можете ли вы загрузить чертеж из подкаталога в папке assets
(не папка с возможностью рисования)?
Можно ли загрузить чертеж из папки активов?
Ответы (8)
Надеюсь, что это поможет:
Drawable d = Drawable.createFromStream(getAssets().open("Cloths/btn_no.png"), null);
Я рекомендую использовать это
Drawable.createFromResourceStream(resources,new TypedValue(), resources.getAssets().open(filename), null)
который возвращает правильно масштабируемый рисунок благодаря ресурсам...
Вот класс со статическим методом для получения рисунков из ресурсов. Он также закрывает входной поток.
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;
}
}
Да, вы можете создать объект Drawable
из объекта InputStream
, используя метод createFromStream().
Вот функция, которая делает это за вас.
Проверьте возвращенную переменную Drawable на значение null, так как null может вернуться, если путь недействителен или существует исключение IOException.
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;
}
Я работал с адаптером RecyclerView и обнаружил, что ответ Дэвида не работает для меня (по какой-то причине asset.open
оставался неразрешенным независимо от того, что я импортировал)
поэтому я обнаружил, что это работает для меня (код Kotlin)
val d = Drawable.createFromStream(context?.assets?.open("imageData/${imageName}.png"), null)
вот мой каталог, как вы можете видеть, ресурсы начинаются из папки с ресурсами, а вот ссылка о том, как создать эту папку ресурсов
В этой версии вы не можете, если вы создадите подпапку в своей папке с возможностью рисования, вы не сможете использовать ее в своем XML-файле, она не будет распознана при использовании android:src.
Взгляните на эту тему: Может ли каталог Android drawable содержать подкаталоги?