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

  • 相关阅读:
    git的使用
    模块化的 require 和 import的区别
    Javascript模块化编程(二)commonJS规范和AMD规范
    Javascript模块化编程(三):require.js的用法
    SQL精华语句
    Convert sql 函数格式
    sql分页存储过程(汇总)
    jira和svn结合
    使用Java Service Wrapper 把Java程序作为Windows系统服务
    Eclipse使用技巧
  • 原文地址:https://www.cnblogs.com/whycxb/p/7245337.html
Copyright © 2011-2022 走看看