【问题标题】:Reading images from asset and fill in the array从资产中读取图像并填写数组
【发布时间】:2017-04-18 07:14:31
【问题描述】:

我有一个画廊 我的画廊中有一些可绘制的图片。像这样首先我像这样将 integer Array 放入。

Integer stickers_big[] = { R.drawable.stck1, R.drawable.stck2,...}

这是我的适配器:

    class stickersAdapter extends BaseAdapter {
    Context ctx;

    public stickersAdapter(FirstActivity act) {
        // TODO Auto-generated constructor stub
        this.ctx = act;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return stickers_drawable.length;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ImageView imageview = new ImageView(ctx);
        imageview.setImageResource(stickers_drawable[position].intValue());
        imageview.setScaleType(android.widget.ImageView.ScaleType.FIT_XY);

        return imageview;
    }

}

现在我想把我的图片放到 assets 中。我确实喜欢这样,我阅读了我的图像名称,然后将其设置到我的 imagview 中。但我只读了一个图像名称。我不知道如何读取我所有图像的名称并打开它们。

 public View getView(int position, View convertView, ViewGroup parent) {
        // TODO Auto-generated method stub
        ImageView imageview = new ImageView(ctx);
        AssetManager assetManager = getAssets();
        try {
            // get input stream
            InputStream ims = assetManager.open("stck1.png");

            // create drawable from stream
            Drawable d = Drawable.createFromStream(ims, null);

            // set the drawable to imageview
            imageview.setImageDrawable(d);
        }
        catch(IOException ex) {

        }


        return imageview;
    }

}

How to read ALL of my images then open them?

【问题讨论】:

    标签: java android android-assets


    【解决方案1】:

    在资产目录中创建子文件夹。使用 getAssets().list() 从资产中获取所有文件名:

     String[] images =getAssets().list("images");
    ArrayList<String> listImages = new ArrayList<String>(Arrays.asList(images));
    
    Now to set image in imageview you first need to get bitmap using image name from assets :
    
    InputStream inputstream=mContext.getAssets().open("images/"
                                          +listImages.get(position));
    Drawable drawable = Drawable.createFromStream(inputstream, null);
    imageView.setImageDrawable(drawable);
    

    【讨论】:

    • 我在这一行有错误 String[] images =getAssets().list("images");
    • 我把它放在 try and catch 中,然后运行它,但没有显示,我的图像没有显示
    【解决方案2】:

    现在我想将我的图像放入资产中。

    首先把你的图片保存到图片文件夹中,然后使用这种方式

     int imageResource = ctx.getResources().getIdentifier("@drawable/stck1".replace(".jpg", ""), null,ctx.getPackageName());
     imageview.setImageResource(imageResource);
    

    【讨论】:

    【解决方案3】:

    假设您的资产文件夹中有这个层次结构

    assets
     |__img1
     |__img2
     |__img3 
    

    你可以像这样得到它们

    try {  
        String[] list = getAssets().list("");
    
        for(String img: list ){
            //do your stuff here
           }
        } catch (IOException e) {
                 e.printStackTrace();
         }
    

    如果资产中有子文件夹,请将其名称输入list("sub_folder");

    您可以在活动中获取此列表,如果您在片段中,则必须执行getActivity()getAssets().list("");。获得图像名称列表后,您可以将其传递给适配器,并可以在 getView() 方法 w.r.t 位置中使用它。

    【讨论】:

    • 您想在哪里获取您已放入资产中的所有名称。 list 将包含所有这些名称,您可以循环它们以获取每个名称。
    • 请你看看 Sandeep dhiman 的回答,现在我可以很容易地得到图像名称,但我的画廊不显示我的照片
    猜你喜欢
    • 1970-01-01
    • 2019-11-30
    • 2016-12-24
    • 2019-07-27
    • 1970-01-01
    • 2013-05-01
    • 2012-03-21
    • 1970-01-01
    相关资源
    最近更新 更多