• 在继承activity类之外的类中使用getResource()时候出现的问题解决


    有几次写代码的时候都碰到了这个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 < MAX_RESOURCE_LENGTH; 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();
    ~~~~~
    }
  • 相关阅读:
    关于数据源跟事件封装实例
    IOS开发基础知识--碎片27
    IOS开发基础知识--碎片26
    IOS开发基础知识--碎片25
    iOS菜单滚动联动内容区域功能实现
    IOS开发基础知识--碎片24
    iOS仿京东分类菜单之UICollectionView内容
    iOS仿京东分类菜单实例实现
    IOS开发基础知识--碎片23
    通用性好的win2003序列号: (推荐先用这个里面的)
  • 原文地址:https://www.cnblogs.com/tiejiangweigaibianercunzai/p/3994021.html
Copyright © 2020-2023  润新知