首页 > 代码库 > 加载ImageView的图片

加载ImageView的图片

最近遇到了一个问题,当写一个自定义属性控件的时候,设置的属性传入的图片可以改变。

自定义属性的方法:http://blog.csdn.net/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));


第三种:直接加载res下的图片

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.csdn.net/detail/forwardyzk/8311677


加载ImageView的图片