作者:陈尧倩682 | 来源:互联网 | 2023-10-11 14:26
有几次写代码的时候都碰到了这个getResource()的使用,当时把它写在了一个普通类当中,用来加载assets当中的图片,但是代码报错。后来发现是由于这个方法是需要context的,但是最初急忙着
有几次写代码的时候都碰到了这个getResource()的使用,当时把它写在了一个普通类当中,用来加载assets当中的图片,但是代码报错。后来发现是由于这个方法是需要context的,但是最初急忙着写而没有仔细的理解,结果折腾半天也不知道怎么修改传递这个context过来,最后为了逃避这个问题,就把它放到了继承activity的类里面去了。
现在又遇到了这个问题,这下必须解决他了。
其实只要在方法调用连传context参数 或者在构造函数里面搞定 就行了:
大致代码如下:
/**
* 从assets是中加载图像资源
* 后期优化代码中的gridview 使用baseadapter的时候使用这种方式加载图片资源
* */
package com.example.changeyouvioce.util;
import java.io.IOException;
import java.io.InputStream;
import com.example.changeyourvioce.VoiceChangeActivity;
import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
public class GridViewResource {
private Context context;
private final static int MAX_RESOURCE_LENGTH = 18;
public Bitmap[] mBitmapArray = null;
public GridViewResource(Context context){
this.cOntext= context;
}
//将图像资源装载到bitmap数组
public Bitmap[] fillBitmapArray(){
String Name = "gridtn";
mBitmapArray = new Bitmap[MAX_RESOURCE_LENGTH];
for (int i = 0; i ) {
int nameNum = i;
String fileName = Name + String.valueOf(nameNum);
Log.e("fileName", fileName);
mBitmapArray[i] = loadFromAsset(context, fileName);
}
return mBitmapArray;
}
//从assets加载图像资源
private Bitmap loadFromAsset(Context context,String fileName){
Bitmap mBitmap = null;
Log.e("loadFromAsset", "execute");
AssetManager am = context.getResources().getAssets();
Log.e("loadFromAsset", "execute ??");
try {
InputStream is = am.open(fileName);
mBitmap = BitmapFactory.decodeStream(is);
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return mBitmap;
}
}
在activity当中调用的代码:
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
~~~~~~~~~~~~~~~~~
mGridViewResource = new GridViewResource(this);
mBitmap = mGridViewResource.fillBitmapArray();
~~~~~
}