加载ImageView的图片

本文介绍了在Android开发中,如何解决自定义属性控件中图片资源ID变动的问题,并提供了四种加载图片的方法,包括从SD卡、src目录、res资源文件夹及通过名字加载res目录下的图片。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

自定义属性的方法: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));


第三种:直接加载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.youkuaiyun.com/detail/forwardyzk/8311677


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值