Android展示指定文件夹下面的所有的图片

先上效果图

这里写图片描述

布局文件

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.xiaoge.openfiles.MainActivity">

    <android.support.v4.view.ViewPager
        android:id="@+id/pics"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"/>

    <TextView
        android:id="@+id/count"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_margin="6dp"
        android:textColor="@android:color/black"
        android:textSize="16sp"
        android:layout_centerHorizontal="true"
        android:layout_alignParentBottom="true"
        android:text="共0张照片,左右滑动切换下一张"/>

</RelativeLayout>

activity中的代码

public class MainActivity extends AppCompatActivity {

    /** 展示内容的ViewPager **/
    private ViewPager pics;
    private Context mContext;
    /** 存放当前文件夹下所有文件的路径的集合 **/
    private static ArrayList<String> paths = new ArrayList<String>();
    /** 展示当前文件夹下面的图片的总数 **/
    private TextView count;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mContext = this;
        initView();
    }

    private void initView() {
        pics = (ViewPager) findViewById(R.id.pics);
        count = (TextView) findViewById(R.id.count);

        Map<String,Bitmap> maps = new TreeMap<String, Bitmap>();
        try {
            maps = buildThum();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        /** 存放当前文件夹下的图片转换成的bitmap **/
        final List<Bitmap> datas = new ArrayList<>();
        /** 存放所有的ImageView的集合 **/
        final List<ImageView> images = new ArrayList<>();

        for (Map.Entry<String,Bitmap> entry : maps.entrySet()) {
            datas.add(entry.getValue());
            ImageView iv = new ImageView(mContext);
            iv.setImageBitmap(entry.getValue());
            Glide.with(mContext)
                    .load(entry.getKey())
                    .into(iv);
            images.add(iv);
        }

        count.setText( (datas.size() == 0 ? 0 : 1) + " / "+datas.size()+" 张");

        // 为viewPager设置适配器
        pics.setAdapter(new PagerAdapter() {
            @Override
            public int getCount() {
                return datas.size();
            }

            @Override
            public boolean isViewFromObject(View view, Object object) {
                return view == object;
            }

            @Override
            public Object instantiateItem(ViewGroup container, int position) {
                container.addView(images.get(position), 0);//添加页卡
                return images.get(position);
            }

            @Override
            public void destroyItem(ViewGroup container, int position, Object object) {
                container.removeView(images.get(position));
            }
        });

        // viewPager 设置页面改变的监听
        pics.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                count.setText((position + 1) +" / "+datas.size()+" 张");
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
    }

    /**
     * 判断当前存储卡是否可用
     **/
    public boolean checkSDCardAvailable() {
        return Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED);
    }

    /**
     * 获取当前需要查询的文件夹
     **/
    public String takePicRootDir(Context context) {
        if (checkSDCardAvailable()) {
            return Environment.getExternalStorageDirectory() + File.separator + "runman";
        } else {
            return context.getFilesDir().getAbsolutePath() + File.separator + "runman";
        }
    }

    /**
     * 描述:  获取指定文件夹下面的所有文件目录
     * 作者:  gyz
     * 时间:  2017-01-17 17:02:40
     */
    private Map<String, Bitmap> buildThum() throws FileNotFoundException {
        File baseFile = new File(takePicRootDir(mContext));
        // 使用TreeMap,排序问题就不需要纠结了
        Map<String, Bitmap> maps = new TreeMap<String, Bitmap>();
        if (baseFile != null && baseFile.exists()) {
            paths = imagePath(baseFile);

            if (!paths.isEmpty()) {
                for (int i = 0; i < paths.size(); i++) {
                    Bitmap bitmap = BitmapFactory.decodeFile(paths.get(i));

                    maps.put(paths.get(i), bitmap);
                }
            }
        }

        return maps;
    }

    /**
     * 描述:  获取图片列表
     * 作者:  gyz
     * 时间:  ${DATE} ${TIME}
     */
    private static ArrayList<String> imagePath(File file) {
        ArrayList<String> list = new ArrayList<String>();

        File[] files = file.listFiles();
        for (File f : files) {
            list.add(f.getAbsolutePath());
        }
        Collections.sort(list);
        return list;
    }
}

完整代码:

DEMO下载

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值