版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

根据图片名称获取项目的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

ResDrawableImgUtil【根据图片名称获取resID值或者Bitmap对象】的更多相关文章

  1. opencv根据摄像头名称获取索引值

    OpenCV的VideoCapture是一个视频读取与解码的API接口,支持各种视频格式.网络视频流.摄像头读取. 针对一般摄像头的读取,opencv为了实现跨平台读取摄像头时是使用的摄像头索引, V ...

  2. 关于Shareppoint客户端对象模型和Shareppoint根据内部名称获取字段值的随笔

    实际上,每个SharePoint字段实际上有两个名称,一个是“标题”(Title,有时候也把它叫做“显示名称”),一个是“内部名称”(Internal Name).平时用户在列表视图界面上看到的,都是 ...

  3. struts框架问题四之获取到值栈的对象

    4. 问题四 : 如何获得值栈对象 * 获得值栈对象 有三种方法 * ValueStack vs1 = (ValueStack) ServletActionContext.getRequest().g ...

  4. C#通过属性名称获取(读取)属性值的方法

    之前在开发一个程序,希望能够通过属性名称读取出属性值,但是由于那时候不熟悉反射,所以并没有找到合适的方法,做了不少的重复性工作啊! 然后今天我再上网找了找,被我找到了,跟大家分享一下. 其实原理并不复 ...

  5. 调试台自动多出现一个'' ,我 用uploadify上传图片时,在给页面写入一个返回值为图片名称的变量的值的时候值的前面始终多出现一个''

    对你有助请点赞,请顶,不好请踩------送人玫瑰,手留余香! 15:54 2016/3/12用uploadify上传图片时,在给页面写入一个返回值为图片名称的变量的值的时候值的前面始终多出现一个' ...

  6. 【转】JavaScript获取节点类型、节点名称和节点值

    DOM节点信息包括节点类型(nodeType).节点名称(nodeName)和节点值(nodeValue). 节点类型 DOM节点中,每个节点都拥有不同的类型.W3C规范中常用的 DOM节点类型有以下 ...

  7. jquery通过name,id名称获取当前value值

    name是input标签的属性值,jQuery提供了attr() 方法用于设置/改变属性值 $("input:text").attr("name");$(&qu ...

  8. jquery如何通过name名称获取当前name的value值

    本文为大家介绍下jquery通过name名称获取当前name的value值的具体实现,感兴趣的朋友可以参考下. 复制代码代码如下: $("*[name='name']").val( ...

  9. C# 反射获取属性值、名称、类型以及集合的属性值、类型名称

    实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<P ...

随机推荐

  1. DD XOFT虚拟键盘鼠标

    下载:http://www.ddxoft.com/ 简介:最多用户选择,最简单易用,最稳定可靠 永久免费 系统底层集成,真正的驱动级硬件模拟 一键安装,即为电脑添加一对可完全编程控制的键盘鼠标,轻松自 ...

  2. gen_server terminate与trap_exit

    不论是新手还是熟手,写gen_server时常会遇到terminate/2,有时执行,有时却不执行的困惑. 比如stackoverflow中的Handling the cleanup of the g ...

  3. python的 a,b=b,a+b 和 a=b b=a+b 的区别(经典)

    刚刚我在学习python的时候,发现下面的这个赋值要把给绕晕了(思考了很久),所以我整理之后写下博文, 希望对未来的学弟学妹有帮助! 永远爱你们的! ----新宝宝 n,a,b=0,0,1 while ...

  4. java编写词法分析器

    词法分析器就是通过扫描一段程序判断是否是关键字.标识符.常数.分界符.运算符.一般分为一符一种和经典五中: 这里我用的是经典五中,此词法分析器是用java编写的: /* 保留字|关键字:1 操作符|运 ...

  5. [Active Learning] 01 A Brief Introduction to Active Learning 主动学习简介

    目录 什么是主动学习? 主动学习 vs. 被动学习 为什么需要主动学习? 主动学习与监督学习.弱监督学习.半监督学习.无监督学习之间的关系 主动学习的种类 主动学习的一个例子 主动学习工具包 ALiP ...

  6. python接口自动化(二十六)--批量执行用例 discover(详解)

    简介 我们在写用例的时候,单个脚本的用例好执行,那么多个脚本的时候,如何批量执行呢?这时候就需要用到 unittest 里面的 discover 方法来加载用例了.加载用例后,用 unittest 里 ...

  7. SpringBoot SpEL表达式注入漏洞-分析与复现

    目录 0x00前言 0x01触发原因 0x02调试分析 0x03补丁分析 0x04参考文章 影响版本: 1.1.0-1.1.12 1.2.0-1.2.7 1.3.0 修复方案:升至1.3.1或以上版本 ...

  8. css属性分类介绍

    css属性分类介绍 CSS分类目录 文本/字体/颜色 文本相关 字体相关 颜色相关 背景相关 大小/布局 大小属性 margin 外边距 padding 内边距 border 边框 position ...

  9. RazorPage 小测试,作下记录

    @page@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf@{}@functions{ public AppInfo item { ...

  10. Linux挖矿病毒 khugepageds详细解决步骤

    一.背景 最近公司一台虚拟机被攻击,其中一种挖矿病毒.会伪CPU数.即如果用top命令只能看到一个cpu.并且负载不高.实际上整个负载300%以上,及时定时任务关掉也不起作用. 二.言归正传开始干掉这 ...