当前位置:编程学习 > wap >>

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),加载的时候直接用取得的数据即可


引用 4 楼 sdf7901300 的回复:
3楼好像误解我的意思了,我的意思不是拿数据库里获取到的数据和drawable目录下的图片进行对比,在目录下都有图片,我现在想要的是要存很多图片在数据库里,然后让程序动态获取这个图片文件,然后显示在我界面button的背景上?
--------------------编程问答-------------------- 再给你个最笨的方法,你可以将整个图片存在数据库里,然后加载前再读出来,这有个不好的地方就是你想换另外张图片的时候还要更新数据库,

引用 9 楼 csuhanyong 的回复:
首先确定下,你存在数据库的图片名肯定在drawable下有相应的图片吧?如果是,请往下看:

  换种思路,你不往数据库里存文件名而是存一个int 的 R.drawable.t11(对应t11,jpg),加载的时候直接用取得的数据即可



引用 4 楼 sdf7901300 的回复:
3楼好像误解我的意思了,我的意思不是拿数据库里获取到的数据和drawable目录下的图片进行对比,……
--------------------编程问答-------------------- 9楼正解.存ID 比存名字方便 --------------------编程问答-------------------- 都是存id 的说,存名字怎么用啊。。。 --------------------编程问答--------------------
引用 11 楼 a13814115003 的回复:
9楼正解.存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个步骤合并在一起了

伪码

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;
}
}
--------------------编程问答-------------------- Fix


        // 得到存储常量的类
         Class<?> clazz = Class.forName(pkg + ".R." + type);
--------------------编程问答--------------------
引用 18 楼  的回复:
记录以下
public static int getDrawable(Context context, String name) {     Assert.assertNotNull(context);     Assert.assertNotNull(name);      return context.getResources().getIdentifier(name,          ……

我用你的方法来获得的Id怎么都是0呢? --------------------编程问答-------------------- 我现在想从sd卡里读,怎么读啊
--------------------编程问答-------------------- 感觉要用到反射的哇,从文件名,反射出图片id直,然后使用这个id来画图。 --------------------编程问答-------------------- 今天正好遇到这个问题,查了一下资料,这种办法可行:

控件.setImageResource(getResources().getIdentifier("文件名_" + "索引号", "drawable", "com.xxxx.xxxxx")); --------------------编程问答-------------------- mark 学习了
控件.setImageResource(getResources().getIdentifier("文件名_" + "索引号", "drawable", "com.xxxx.xxxxx"));
补充:移动开发 ,  Android
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,