android怎么从drawable目录下动态获取图片??
我现在从数据库中获取到了图片的名称,比如“t11.jpg”,怎么根据这个名称在drawable目录下获取这张图片并加载到button的背景上??求指教 --------------------编程问答-------------------- --------------------编程问答-------------------- 你看看Assets资源读取吧,当然仅仅加载给Button,直接使用setBackground的方法,使用类似R.drawable.image_name就行了 --------------------编程问答-------------------- 这个要用到java的反射技术下面代码可以将drawable文件夹下的所以图片名称获取到:
Field[] fields = R.drawable.class.getDeclaredFields();
for(Field field:fields){
if(!"icon".equals(field.getName())){
sb.append(field.getName() + "\t");
}
}
mTextView.setText(sb.toString());
楼主将获取的所以名称存放在list中,然后进行判断即可。 --------------------编程问答-------------------- 3楼好像误解我的意思了,我的意思不是拿数据库里获取到的数据和drawable目录下的图片进行对比,在目录下都有图片,我现在想要的是要存很多图片在数据库里,然后让程序动态获取这个图片文件,然后显示在我界面button的背景上? --------------------编程问答-------------------- hh 还没学那么深 --------------------编程问答-------------------- 这个恐怕不太好处理,drawable下的所有图片都在R.java中有对应的id,要获取该图片设置成背景,必须获取该图片的id,不知道楼主要做什么样的效果
如果图片显示没有规律的话,直接用个int型的数组存放图片,然后从数组中去图片,设置背景
如果有规律,像同样一个图片,显示不同的状态,在drawable下写一个xml文件,当获取焦点、单击时会变换不同的图片。 --------------------编程问答-------------------- 使用图片的时候可以用ID 应该也可以用路径吧 每个平台都有这样的功能的啊
--------------------编程问答-------------------- Bitmap bitmap = BitmapFactory.decodeFile(文件路径, null/*如果想加速,可以用设定options先取得宽高*/);
如果是ImageView控件,可以很容易地set上去。我们就这么做的。
如果非要用button,下面的可以参考(没实际试过):
Drawable drawable = Drawable.createFromPath(文件路径);
Button实例.setBackgroundDrawable(drawable)。
语法上可能不对,但是你应该能明白。 --------------------编程问答-------------------- 首先确定下,你存在数据库的图片名肯定在drawable下有相应的图片吧?如果是,请往下看:
换种思路,你不往数据库里存文件名而是存一个int 的 R.drawable.t11(对应t11,jpg),加载的时候直接用取得的数据即可
--------------------编程问答-------------------- 再给你个最笨的方法,你可以将整个图片存在数据库里,然后加载前再读出来,这有个不好的地方就是你想换另外张图片的时候还要更新数据库,
--------------------编程问答-------------------- 9楼正解.存ID 比存名字方便 --------------------编程问答-------------------- 都是存id 的说,存名字怎么用啊。。。 --------------------编程问答--------------------
两种想法:查看框架,使用和Google一样的算法直接通过名字生成ID
或者通过相对路径访问Drawable目录,获取图像. --------------------编程问答-------------------- http://gundumw100.iteye.com/blog/1135242 --------------------编程问答-------------------- 在<button>里加一句 android:background=“@drawable/图片名字” --------------------编程问答-------------------- int id_up = context.getResources().getIdentifier(pic_name,
"drawable", "com.Test");
android的按名存取图片 --------------------编程问答-------------------- 16楼正解
虽不中亦不远已
JAVA再差,都有一些类,是用来getResouce的
楼上一堆不懂的在吹水 --------------------编程问答-------------------- 记录以下
public static int getDrawable(Context context, String name) { Assert.assertNotNull(context); Assert.assertNotNull(name); return context.getResources().getIdentifier(name, "drawable", context.getPackageName()); } --------------------编程问答-------------------- getResource().getIdentifier 本质上,还是java的反射。
只不过把反射得到类名,反射得到常量,及反射得到常量的值,3个步骤合并在一起了
伪码
--------------------编程问答-------------------- Fix
int getIdentifier(String name, String type, String pkg) {
// 去掉后缀名,比如 .png .jpeg
int index = name.indexOf('.');
if (index > -1)
name = name.substring(0, index);
try {
// 得到存储常量的类
Class<?> clazz = Class.forName(pkg + "." + type);
// 反射得到常量
Field f = clazz.getDeclaredField(name);
// 反射得到常量的值
int id = f.getInt(null);
return id;
} catch (Exception e) {
return 0;
}
}
--------------------编程问答--------------------
// 得到存储常量的类
Class<?> clazz = Class.forName(pkg + ".R." + type);
我用你的方法来获得的Id怎么都是0呢? --------------------编程问答-------------------- 我现在想从sd卡里读,怎么读啊
--------------------编程问答-------------------- 感觉要用到反射的哇,从文件名,反射出图片id直,然后使用这个id来画图。 --------------------编程问答-------------------- 今天正好遇到这个问题,查了一下资料,这种办法可行:
控件.setImageResource(getResources().getIdentifier("文件名_" + "索引号", "drawable", "com.xxxx.xxxxx")); --------------------编程问答-------------------- mark 学习了
控件.setImageResource(getResources().getIdentifier("文件名_" + "索引号", "drawable", "com.xxxx.xxxxx"));
补充:移动开发 , Android