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

版权声明:本文为博主原创文章,未经博主允许不得转载。

前言

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

时间: 2024-10-16 06:59:54

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

Android开发中根据图片名称获取在drawable中的ID

在Android开发中图片资源是必不可少的,如ImageView需要图片资源的ID,ImageButton需要资源的ID等等,我们可以用R.drawable.XXX可以获取图片资源的ID,但是,在某些时候,这样做很费时,我们想动态的获得资源ID,比如说,我传入一个图片名称的字符串,根据字符串来获得资源的ID这样就很方便了,没错,这样确实很方便,我们如果对图片的名称稍加改动,比如用img1.png,img2.png,img3.png...这样就可以在一个循环之内获得所有的ID,对开发来说少写的就不

仿腾讯QQ拍照 背景图片滑动获取图片

1.首先我们来看一下效果图片 2.再看一下项目结构 3.里面注释很多我就不仔细讲了,大家仔细看吧 首先是MainActivity: public class MainActivity extends Activity { private ClipImageView imageView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCont

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

$("*[name='name']").val(); //获取vlaue值 $("*[name='name']").attr('id','name'); //添加id名称 $("*[name='name']").after('<div>hello world</div>'); //在当前外添加元素

js 获取图片url的Blob值并预览

1)使用 XMLHttpRequest 对象获取图片url的Blob值 //获取图片的Blob值 function getImageBlob(url, cb) { var xhr = new XMLHttpRequest(); xhr.open("get", url, true); xhr.responseType = "blob"; xhr.onload = function() { if (this.status == 200) { if(cb) cb(this

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

name是input标签的属性值,jQuery提供了attr() 方法用于设置/改变属性值 $("input:text").attr("name");$("input:text").prop("name");  // 也可以使用prop()方法获取属性 $("*[name='name']").val(); //获取vlaue值 $("*[name='name']").attr('id',

Android:根据图片的名称获取对应的资源id

/** * 根据图片的名称获取对应的资源id * @param resourceName * @return */ public int getDrawResourceID(String resourceName) { Resources res=getResources(); int picid = res.getIdentifier(resourceName,"drawable",getPackageName()); return picid; }

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

实体类 class Product { public string Id { get; set; } public string Name { get; set; } public List<ProductDetail> Detail { get; set; } public List<ProductComment> Comment { get; set; } } class ProductDetail { public string DtlId { get; set; } pub

java获取对象属性类型、属性名称、属性值

因为项目需要用到,于是简单封装了一些常用的操作: [java] view plaincopy /** * 根据属性名获取属性值 * */ private Object getFieldValueByName(String fieldName, Object o) { try { String firstLetter = fieldName.substring(0, 1).toUpperCase(); String getter = "get" + firstLetter + field

怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图?

  分类: OpenCV [Q1]怎么样用opencv将彩色图片转化成像素值只有0和255的灰度图? 进行灰度化,IplImage* pImg = cvLoadImage( "C:\\1.bmp", 0 ); 这样图像已经灰度化,然后调用cvThreshold(image, image, 125, 255, CV_THRESH_BINARY); 就可以了,125那里是你所用的阈值,这就是最简单的二值化,你要用ostu,或者别的高级一点的,就要自己写函数了   // Truncate v