最近遇到了一个问题,当写一个自定义属性控件的时候,设置的属性传入的图片可以改变。
自定义属性的方法:http://blog.youkuaiyun.com/forwardyzk/article/details/25079743
开始的思路是:自定义的属性为integer类型,那么调用处写如对应图片在res下的id,但是当clean的时候,这个id有可能会改变,所以不能传入id。
所以现在更改为:在设置的自定义属性的地方传入res下对应图片的名字,那么再加载此图片,但是遇到了问题,没有方法直接通过名字来获取对应图片的对象。
下面就介绍加载不同位置的图片的方法。
第一种:加载Sdcard下的图片
private void getImageFromSdcard(String name) {
String imageDir = Environment.getExternalStorageDirectory().getPath();
String imagePath = imageDir + "/" + name;
File file = new File(imageDir);
if (!file.exists()) {
file.mkdirs();
}
iv.setImageBitmap(BitmapFactory.decodeFile(imagePath));
}
第二种:加载src目录下的图片
com.example.drawable包下的一个src_d.jpg图片
String path = "com/example/drawable/src_d.jpg"; // 图片存放的路径
InputStream is = getClassLoader().getResourceAsStream(path); // 得到图片流
iv.setImageBitmap(BitmapFactory.decodeStream(is));
iv.setImageResource(R.drawable.res_d);
第四种:通过名字加载res目录下的图片
/**
* 这种先通过名字获取id,然后在通过id获取流。最后加载图片
*
* 例如:你自定义了属性,如果你传入Id的话,每次更新可能会变化的。所以传入名字比较好
*
* 但是又遇到了问题,传入名字怎样获取图片呢,那么就通过这个方法获取对应的图片,然后加载
*/
public void loadImageByName(String name) {
ApplicationInfo appInfo = getApplicationInfo();
// 得到该图片的id(name 是该图片的名字,"drawable"
// 是该图片存放的目录,appInfo.packageName是应用程序的包)
int resID = getResources().getIdentifier(name, "drawable",
appInfo.packageName);
iv.setImageBitmap(BitmapFactory.decodeResource(getResources(), resID));
}
源码下载:http://download.youkuaiyun.com/detail/forwardyzk/8311677