您的位置:首页 > 其它

ResDrawableImgUtil【根据图片名称获取resID值或者Bitmap对象】

2017-07-29 14:55 351 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。

前言

根据图片名称获取项目的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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐