如何在此图库应用中显示所有图片?

时间:2016-08-19 20:11:25

标签: java android adapter gallery android-glide

我正在制作图库应用程序。

我有该任务的代码,但我想显示所有SD内部存储图像。只有我能在我的应用程序中看到一个特定的文件夹,我理解为什么。这是我在互联网上找到的一种方法。

MainActivity.java

import android.content.Intent;
import android.os.Bundle; 
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;

import com.instinctcoder.gridview.R;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private GridView gridView;
    private GridViewAdapter gridAdapter;
    private List<String> imageItems;
    private String imagePath="";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //location where photo saved
        imagePath =  Environment.getExternalStorageDirectory().toString() +                           "/DCIM/Camera";//I'd like to add more Folders, but it doesn't work
        imageItems = new ArrayList<>();


        getImages();

        gridView = (GridView) findViewById(R.id.gridView);
        gridAdapter = new GridViewAdapter(this, R.layout.grid_item, imageItems);
        gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
                String imagePath =   parent.getAdapter().getItem(position).toString();
                Intent intent = new Intent(MainActivity.this, DetailActivity.class);
                intent.putExtra("imagePath", imagePath);

                startActivity(intent);
            }
        });
        gridView.setAdapter(gridAdapter);

    }


    private List<String> getImages(){
        new File(imagePath ).mkdirs();

        File fileTarget = new File(imagePath);
        File[] files = fileTarget.listFiles();

        imageItems.clear();

        if (files!=null){
            for (File file: files){
                imageItems.add(file.getAbsolutePath());
            }
        }
        return imageItems;
    }
}

GridViewAdapter.java

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import com.bumptech.glide.Glide;
import com.instinctcoder.gridview.R;
import java.util.ArrayList;
import java.util.List;

public class GridViewAdapter extends ArrayAdapter {
    private Context context;
    private List<String> data = new ArrayList<String>();
    private int resourceId;
    private LayoutInflater inflater ;

    public GridViewAdapter(Context context, int resourceId, List<String> data) {
        super(context, resourceId, data);
        this.resourceId = resourceId;
        this.context = context;
        this.data = data;
        inflater = LayoutInflater.from(context);

    }

    static class ViewHolder {
        ImageView image;
    }


    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ViewHolder holder = null;
        if (row == null) {
            row = inflater.inflate(resourceId, parent, false);
            holder = new ViewHolder();
            holder.image = (ImageView) row.findViewById(R.id.image);
            row.setTag(holder);
        } else {
            holder = (ViewHolder) row.getTag();
        }

        Glide.with(context)
                .load("file://" + data.get(position))
                .fitCenter()
                .centerCrop()
                .into(holder.image);

        return row;
    }

Detailactivity.java

package com.instinctcoder.gridview.Galeria;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.instinctcoder.gridview.R;

public class DetailActivity extends AppCompatActivity {

    Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_detail);

        String imagePath = getIntent().getStringExtra("imagePath");

        ImageView picturesView = (ImageView) findViewById(R.id.image);
        Glide.with(DetailActivity.this)
                .load("file://" + imagePath)
                .fitCenter()
                .centerCrop()
                .into(picturesView);

    }

}

在清单中,我已经声明了权限存储,父活动。 另外,我在gradle上添加滑动库。

0 个答案:

没有答案