如何将资产文件夹中的图像设置为列表视图?(使用SimpleAdapter)
How to set images from assets folder to list view?(using SimpleAdapter)
我在名为 images1 的资产中有一个文件夹,里面有 114 张图片。我需要用 2 个 textView 和 1 个 imageView 在 listView 中设置它们。我对 textViews 没有问题,但我不知道如何将资产中的图像设置为 listView。
我试过了:
int ids[] = new int[114];
for (int i = 0; i <ids.length; i++) {//<-------- taking ids of all pictures from images1 in assets-folder
try {
String[] images =getAssets().list("images1");
ArrayList<String> listImages = new ArrayList<String>(Arrays.asList(images));
int imgId = getResourceId(this, listImages.get(i),"images1", getPackageName());
ids[i] = imgId;
}
catch(IOException ex) {}
}
ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
questionTexts.length);//<--------filling listView's textViews and imageView
Map<String, Object> m;
for (int i = 0; i < questionTexts.length; i++) {
m = new HashMap<String, Object>();
m.put(ATTRIBUTE_QUESTION_TEXT, questionTexts[i]);//<-------- textView
m.put(ATTRIBUTE_ANSWER_TEXT, answerTexts[i]);//<-------- textView
m.put(ATTRIBUTE_NAME_IMAGE, ids[i]);//<-------- imageView
data.add(m);
String[] from = { ATTRIBUTE_QUESTION_TEXT, ATTRIBUTE_ANSWER_TEXT,
ATTRIBUTE_NAME_IMAGE };
int[] to = { R.id.listView_item_title, R.id.listView_item_short_description, R.id.listView_image };
SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.item,
from, to);
lvSimple = (ListView) findViewById(R.id.lvSimple);
lvSimple.setAdapter(sAdapter);
}
public static int getResourceId(Context context,String variableName, String resourceName,
String packageName) throws RuntimeException{//<----- this method helps me to get IDs of images from assets/images1
try{
return context.getResources().getIdentifier(variableName,resourceName,packageName);
}catch (Exception e){
throw new RuntimeException("Error getting resource id");
}
}
但最后我的照片变成了白色区域。
我知道当你的图片在 R.drawable 中时如何解决这个问题,但是当它们在 assets 子文件夹中时如何解决?
您可以使用以下代码获取位图
private Bitmap getBitmapFromAssets(String fileName){
AssetManager am = getAssets();
InputStream is = null;
try{
is = am.open(fileName);
}catch(IOException e){
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
您可以使用 "Glide" 在 imageview 中显示位图这是示例代码
Glide.with(context)
.load(Uri.parse("file:///android_asset/fileName"))
.into(imageView);
您确定这些图像应该在 assets/
文件夹中吗?为什么不在 res/drawables/
中?
当然你可以从资产中加载它;)
要获取资产文件夹中所有文件的列表,请使用以下代码:
list = getAssets().list("images1")
要从资产加载图像,您可以使用以下代码:
fun setImageFromAsset(ImageView view, String filename) {
try {
InputStream is = getAssets().open(filename);
Drawable drawable = Drawable.createFromStream(is, null);
view.setImageDrawable(drawable);
}
catch(IOException ex) {
return;
}
}
你可以用这个。
try
{
// get input stream
InputStream ims = getAssets().open("avatar.jpg");
// load image as Drawable
Drawable d = Drawable.createFromStream(ims, null);
// set image to ImageView
mImage.setImageDrawable(d);
ims .close();
}
catch(IOException ex)
{
return;
}
简单适配器只能使用可绘制文件夹中的 ID 或 Uri。但是您可以使用 ViewBinder 通过 setImageBitmap 方法设置图像。
我在名为 images1 的资产中有一个文件夹,里面有 114 张图片。我需要用 2 个 textView 和 1 个 imageView 在 listView 中设置它们。我对 textViews 没有问题,但我不知道如何将资产中的图像设置为 listView。 我试过了:
int ids[] = new int[114];
for (int i = 0; i <ids.length; i++) {//<-------- taking ids of all pictures from images1 in assets-folder
try {
String[] images =getAssets().list("images1");
ArrayList<String> listImages = new ArrayList<String>(Arrays.asList(images));
int imgId = getResourceId(this, listImages.get(i),"images1", getPackageName());
ids[i] = imgId;
}
catch(IOException ex) {}
}
ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
questionTexts.length);//<--------filling listView's textViews and imageView
Map<String, Object> m;
for (int i = 0; i < questionTexts.length; i++) {
m = new HashMap<String, Object>();
m.put(ATTRIBUTE_QUESTION_TEXT, questionTexts[i]);//<-------- textView
m.put(ATTRIBUTE_ANSWER_TEXT, answerTexts[i]);//<-------- textView
m.put(ATTRIBUTE_NAME_IMAGE, ids[i]);//<-------- imageView
data.add(m);
String[] from = { ATTRIBUTE_QUESTION_TEXT, ATTRIBUTE_ANSWER_TEXT,
ATTRIBUTE_NAME_IMAGE };
int[] to = { R.id.listView_item_title, R.id.listView_item_short_description, R.id.listView_image };
SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.item,
from, to);
lvSimple = (ListView) findViewById(R.id.lvSimple);
lvSimple.setAdapter(sAdapter);
}
public static int getResourceId(Context context,String variableName, String resourceName,
String packageName) throws RuntimeException{//<----- this method helps me to get IDs of images from assets/images1
try{
return context.getResources().getIdentifier(variableName,resourceName,packageName);
}catch (Exception e){
throw new RuntimeException("Error getting resource id");
}
}
但最后我的照片变成了白色区域。 我知道当你的图片在 R.drawable 中时如何解决这个问题,但是当它们在 assets 子文件夹中时如何解决?
您可以使用以下代码获取位图
private Bitmap getBitmapFromAssets(String fileName){
AssetManager am = getAssets();
InputStream is = null;
try{
is = am.open(fileName);
}catch(IOException e){
e.printStackTrace();
}
Bitmap bitmap = BitmapFactory.decodeStream(is);
return bitmap;
}
您可以使用 "Glide" 在 imageview 中显示位图这是示例代码
Glide.with(context)
.load(Uri.parse("file:///android_asset/fileName"))
.into(imageView);
您确定这些图像应该在 assets/
文件夹中吗?为什么不在 res/drawables/
中?
当然你可以从资产中加载它;)
要获取资产文件夹中所有文件的列表,请使用以下代码:
list = getAssets().list("images1")
要从资产加载图像,您可以使用以下代码:
fun setImageFromAsset(ImageView view, String filename) {
try {
InputStream is = getAssets().open(filename);
Drawable drawable = Drawable.createFromStream(is, null);
view.setImageDrawable(drawable);
}
catch(IOException ex) {
return;
}
}
你可以用这个。
try
{
// get input stream
InputStream ims = getAssets().open("avatar.jpg");
// load image as Drawable
Drawable d = Drawable.createFromStream(ims, null);
// set image to ImageView
mImage.setImageDrawable(d);
ims .close();
}
catch(IOException ex)
{
return;
}
简单适配器只能使用可绘制文件夹中的 ID 或 Uri。但是您可以使用 ViewBinder 通过 setImageBitmap 方法设置图像。