zoukankan      html  css  js  c++  java
  • ResDrawableImgUtil【根据图片名称获取resID值或者Bitmap对象】

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

  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/whycxb/p/7245337.html
Copyright © 2011-2022 走看看