Android - 如何显示来自可绘制资源的图像?
Posted
技术标签:
【中文标题】Android - 如何显示来自可绘制资源的图像?【英文标题】:Android - How to show images from resources drawable? 【发布时间】:2011-09-14 04:17:52 【问题描述】:我无法显示保存在 res/drawable 文件夹中的图像。 我使用 ImageGetter 来做到这一点。代码如下:
ImageGetter imageGetter3 = new ImageGetter()
public Drawable getDrawable(String source)
int id=0;
if (source.equals("smiley"))
id = R.drawable.smiley;
Drawable d = getResources().getDrawable(id);
d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
;
directions += "Je bent bij lokaal " + vertrek.getNaam() + "\n"
+ "Sta met je rug voor de deur\n"
+ html.fromHtml("<img src=\"smiley\">", imageGetter3, null) + " Draai naar links\n";
我在运行时在屏幕上看到的是一个带有“obj”文本的小方块。 那么有什么问题呢?图像无法读取或其他? 如何显示图片?
老实说,我在 Google 上搜索了很多,也尝试了 ImageGetter 的其他方法,但它们似乎都不起作用,我也尝试了这些,它们不起作用:
ImageGetter imageGetter2 = new ImageGetter()
public Drawable getDrawable(String source)
Drawable d = null;
d = Drawable.createFromPath(source);
d.setBounds(0,0, d.getIntrinsicWidth(), d.getIntrinsicHeight());
return d;
;
ImageGetter imageGetter = new ImageGetter()
public Drawable getDrawable(String source)
Drawable drawFromPath;
int path = Route.this.getResources().getIdentifier(source, "drawable","com.prj56.tracingapp");
drawFromPath = (Drawable) Route.this.getResources().getDrawable(path);
drawFromPath.setBounds(0, 0, drawFromPath.getIntrinsicWidth(), drawFromPath.getIntrinsicHeight());
return drawFromPath;
;
================================================ ========== 如果 (....) ImageView iv1 = new ImageView(this); iv1.setImageResource(R.drawable.smiley);
directions += "Je bent bij lokaal " + vertrek.getNaam() + "\n"
+ "Sta met je rug voor de deur\n";
HERE COMES THE IMAGE! BUT HOW TO DO THIS? It's within directions textview...
directions += " Draai naar links\n";
【问题讨论】:
“显示图片”是什么意思?你想在哪里展示它? 【参考方案1】:2016 年 12 月 12 日更新:
getResources().getDrawable() 在 api 22 中已弃用,因此您现在应该使用 ContextCompat.getDrawable 例如
Drawable d = ContextCompat.getDrawable(context, R.drawable.smiley);
在您的活动中,您可以调用它来获取您的可绘制资源作为可绘制对象
Drawable d = getResources().getDrawable(R.drawable.smiley);
如果你想在 ImageView 中显示你的drawable,你可以这样做:
ImageView i = new ImageView(this);
i.setImageResource(R.drawable.smiley);
或在您的 xml 文件中
<ImageView
android:layout_
android:layout_
android:src="@drawable/smiley"/>
【讨论】:
问题是我没有默认的地方来声明ImageView,因为ImageView需要在代码中动态创建。根据 if 决定,将有不同的方向,包括要显示的图像。 你看过这个吗? ***.com/questions/2865452/… 是的,但仍然无法正常工作。无论如何,我找到了一个解决方案,那就是使用 SpannableStringBuilder。这是一个非常简单的解决方案,用于将图像插入到文本视图中! 嗨,yanny,我可以一张一张地绘制图像。但我想同时绘制多个图像并将其设置为文本视图。我已经用getter方法尝试过了。但不是成功。如果您已经解决了此类问题,请帮助我。 getResources().getDrawable();在 api 22 中已弃用。您应该使用 ContextCompat 解决方案。【参考方案2】:您可以借助pImg获取图像。根据适配器位置获取作为图像名称的字符串。图像应该存在于drawable文件夹中。
ImageView prodImg=(ImageView)view.findViewById(R.id.img_proj_name);
String pImg=prod.get(position);
int resID = view.getResources().getIdentifier("@drawable/"+pImg , "drawable", parentView.getContext().getPackageName());
prodImg.setImageResource(resID);
【讨论】:
感谢您的想法,非常有帮助。【参考方案3】:显示它的一个超级简单的方法是在你的 xml 中的 ImageView 小部件中写这个:
android:background="@drawable/your_file_name"
...并确保您已将该图像文件(无论是 png 还是 jpg 等)放入您的可绘制文件夹中。写your_file_name
时,只需要标题,不需要文件扩展名。
我更喜欢这种方式而不是以编程方式写入您的 .java 文件(如上面的其他答案所示),因为您的 xml 会在预览中向您显示图像,而以编程方式不会,它只会显示 ImageView 占位符。
【讨论】:
【参考方案4】:最简单的方法 - 可以考虑下面的代码
我们可以利用 Imageview setImageResource ,参考下面的代码。 将图像按以下顺序放入可绘制对象中
image_1.png、image_2.png 等
int resId = getResources().getIdentifier("image_" + imagePosition, "drawable", getPackageName());
imageview.setImageResource(resId);
【讨论】:
【参考方案5】: Drawable drawable = getResources().getDrawable(R.mydrawableID);
现在您可以将其用作图像,例如:-
ImageView myImage = findViewById(R.id.yourImageView);
现在开火 -
myImage.setImageResource(drawable);
【讨论】:
getDrawable(R.mydrawableID)
在 Lollipop API 22 中已弃用【参考方案6】:
您应该使用ContextCompat
来获得 Android 上的向后兼容性功能。
//Using ButterKnife
@BindView(R.id.DogImg)
ImageView myImage;
//Or
ImageView myImage = findViewById(R.id.MyImage);
...
Drawable MyImageDrw = ContextCompat.getDrawable(context,R.drawable.myImageOnResources);
myImage.setImageDrawable(MyImageDrw);
【讨论】:
以上是关于Android - 如何显示来自可绘制资源的图像?的主要内容,如果未能解决你的问题,请参考以下文章