ResDrawableImgUtil【根据图片名称获取resID值或者Bitmap对象】
2017-07-29 14:55
351 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。
注意事项:
1、导入类文件后需要change包名以及重新import R文件路径
2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
注意:黄色标记的地方,分别为Eclipse何Android studio两个开发环境下的写法。
Android中,根据图片名称获取res文件夹中的图片
前言
根据图片名称获取项目的res/drawable-xxdhpi中相应资源的ID值以及bitmap值的封装类。效果图
代码分析
根据图片名称获取图片的resID值有两个方案,选其一即可。使用步骤
一、项目组织结构图
注意事项:
1、导入类文件后需要change包名以及重新import R文件路径
2、Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖
二、导入步骤
将ResDrawableImgUtil.java复制到项目中即可。package com.why.project.resdrawableimgutildemo.util; import android.content.Context; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.drawable.Drawable; import android.support.v4.content.ContextCompat; import com.why.project.resdrawableimgutildemo.R; import java.lang.reflect.Field; /** * @Created HaiyuKing * @Used 根据图片名称获取resID值或者Bitmap对象 * @参考资料 http://topmanopensource.iteye.com/blog/1600321 * http://blog.csdn.net/wuzhipeng1991/article/details/17374561 */ public class ResDrawableImgUtil { public final static String FILE_EXTENSION_SEPARATOR = ".";//文件扩展名分割器 /** * 根据图片名称获取图片的resID值(方案一) * @param imgName 图片名称*/ public static int getResourceIdByIdentifier(Context context, String imgName){ //判断imgName是否含有后缀 int extenPosi = imgName.lastIndexOf(FILE_EXTENSION_SEPARATOR); if(extenPosi != -1){ imgName = imgName.substring(0, extenPosi); } int imgResourceId = -1; imgResourceId = context.getResources().getIdentifier(imgName, "drawable" , context.getPackageName()); return imgResourceId; } /** * 根据图片名称获取图片的resID值(方案二) * @param imgName 图片名称*/ public static int getResourceIdByReflect(String imgName){ //判断imgName是否含有后缀 int extenPosi = imgName.lastIndexOf(FILE_EXTENSION_SEPARATOR); if(extenPosi != -1){ imgName = imgName.substring(0, extenPosi); } int imgResourceId = -1; Class drawable = R.drawable.class; Field field = null; try { field = drawable.getField(imgName); imgResourceId = field.getInt(field.getName()); } catch (Exception e) { } return imgResourceId; } /** * 根据图片的resID值获取图片名称 * @param imgResId 图片的resID值*/ public static String getResourceName(Context context,int imgResId){ String imgName = ""; imgName = context.getResources().getResourceName(imgResId); return imgName; } /** * 根据图片名称获取图片的Drawable * @param imgName 图片名称*/ public static Drawable getDrawableByImgName(Context context, String imgName){ //int imgResourceId = R.drawable.ic_launcher;//Eclipse写法 int imgResourceId = R.mipmap.ic_launcher;//Android Studio写法 imgResourceId = getResourceIdByIdentifier(context,imgName); //解析资源文件夹下,id为resID的图片 return ContextCompat.getDrawable(context,imgResourceId); } /** * 根据图片名称获取图片的Bitmap * @param imgName 图片名称*/ public static Bitmap getBitmapByImgName(Context context, String imgName){ //int imgResourceId = R.drawable.ic_launcher;//Eclipse写法 int imgResourceId = R.mipmap.ic_launcher;//Android Studio写法 imgResourceId = getResourceIdByIdentifier(context,imgName); //解析资源文件夹下,id为resID的图片 return BitmapFactory.decodeResource(context.getResources(),imgResourceId); } }
注意:黄色标记的地方,分别为Eclipse何Android studio两个开发环境下的写法。
三、使用方法
package com.why.project.resdrawableimgutildemo; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; import com.why.project.resdrawableimgutildemo.util.ResDrawableImgUtil; public class MainActivity extends AppCompatActivity { private Button btn_getId; private TextView tv_show; private ImageView img_show; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initViews(); initEvents(); } private void initViews() { btn_getId = (Button) findViewById(R.id.btn_getId); tv_show = (TextView) findViewById(R.id.tv_show); img_show = (ImageView) findViewById(R.id.img_show); } private void initEvents() { btn_getId.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String imgName = "icon.png"; int resId = ResDrawableImgUtil.getResourceIdByIdentifier(MainActivity.this,imgName); tv_show.setText(tv_show.getText().toString() + resId); if(resId != -1){ img_show.setBackgroundResource(resId); } } }); } }
混淆配置
无参考资料
Android根据图片文件名获取它的资源ID 的两种方式Android中,根据图片名称获取res文件夹中的图片
项目demo下载地址
https://github.com/haiyuKing/ResDrawableImgUtilDemo相关文章推荐
- android 根据图片url获取bitmap或者drawable,然后再进行压缩处理
- android如何获取res文件夹下drawable文件夹下的图片资源文件转成一个BitMap对象
- jquery 根据样式或者名称获取 对象遍历赋值
- Android中,根据图片名称获取res文件夹中的图片
- 根据图片url获取bitmap对象,并保存至sd卡
- Android 把bitmap转换成String,计算图片的缩放值,根据路径获得突破并压缩返回bitmap用于显示,获取保存 隐患检查的图片文件夹名称,获取保存图片的目录,根据路径删除图片,添加到图库
- 在drawable文件中的图片获取bitmap对象
- Android 根据drawable中图片的名称获取ID
- java Enum 枚举帮助类,根据值或者名称获取枚举类型对象(从ITEYE搬家过来的)
- Android通过拼接名字获取drawable下的图片(根据图片名称获取在drawable中的ID)
- Android开发中根据图片名称获取在drawable中的ID
- 通过图片url生成Bitmap对象和Drawable对象
- 常用方法(1)------根据图片的url路径获得Bitmap对象
- 安卓获取res下的资源文件:string字符串、color颜色、dimen尺寸、array数组、drawable图片和xml、anim/animator动画、raw媒体、assets资源
- Android 根据网络图片URL转Bitmap对象
- [Android] bitmap/drawable/byte的转换和获取圆角/倒影图片
- android——获取ImageView上面显示的图片bitmap对象
- java 根据图片地址获取到图片的大小,单位kb或者Mb
- Glide获取图片宽高以及setImageDrawable和setImageBitmap区别
- Android—根据URL获取Bitmap图片