博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ResDrawableImgUtil【根据图片名称获取resID值或者Bitmap对象】
阅读量:6859 次
发布时间:2019-06-26

本文共 4611 字,大约阅读时间需要 15 分钟。

版权声明:本文为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);                }            }        });    }}

混淆配置

参考资料

项目demo下载地址

你可能感兴趣的文章
(转)linux下vi命令修改文件及保存的使用方法
查看>>
循环中else的用法
查看>>
Reverse String
查看>>
linux安装ffmpeg
查看>>
第三期 轨迹生成——2.运动规划问题
查看>>
PHP 从数组对象中取出数组提示:Undefined property: stdClass::$subject
查看>>
存储过程
查看>>
ext组件中的查询
查看>>
Python笔记总结week1
查看>>
c#中使用NetCDF存储二维数据的读写操作简单应用
查看>>
linux网络相关命令使用
查看>>
java基础(二)
查看>>
cocos2d中的anchorPoint
查看>>
记录一下:chrome上,把网页保存为文件的插件
查看>>
C#和Javascript间互转的Xxtea加解密
查看>>
BAT批处理中的字符串处理详解(字符串截取)
查看>>
智力题集锦【二】
查看>>
读 《我为什么放弃Go语言》 有感
查看>>
删除MySQL中冗余字段
查看>>
linux基础—课堂随笔_03 SHELL脚本编程基础
查看>>