版權聲明:本文為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); } } }); } }
混淆配置
無