Android实现从SD卡指定路径获取图片进行轮播

1、此项目实现了图片从SD卡中获取,获取图片后进行自动轮播或者滑动

2、项目运行效果:

     

3、大概流程及关键代码分享

      (1)、从SD卡指定文件夹获取图片

   sdUrl :指的是图片存在SD卡的路径

File file = new File(sdUrl);

if(file.isDirectory()){
    for(File fileUrl : file.listFiles()){
        String path = fileUrl.getAbsolutePath();
        if(path.endsWith(".jpg")||path.endsWith(".jpeg")||path.endsWith(".png")){
            list.add(path);
        }
    }
}

       (2)、初始化显示的数据

/** 初始化要展示的ImageView*/
imageViewList = new ArrayList<ImageView>();
ImageView imageView;
View pointView;
LinearLayout.LayoutParams layoutParams;
for (int i = 0; i < list.size(); i++) {
    /** 初始化要显示的图片对象*/
    imageView = new ImageView(this);
    imageView.setImageBitmap(BitmapFactory.decodeFile(list.get(i)));
    imageViewList.add(imageView);
    /** 加小白点, 指示器*/
    pointView = new View(this);
    pointView.setBackgroundResource(R.drawable.selector_bg_point);
    layoutParams = new LinearLayout.LayoutParams(20, 20);
    if (i != 0) {
        layoutParams.leftMargin = 10;
    }
    /** 设置默认所有都不可用*/
    pointView.setEnabled(false);
    llPointContainer.addView(pointView, layoutParams);
}

       (3)、初始化适配器

llPointContainer.getChildAt(0).setEnabled(true);
previousSelectedPosition = 0;

/** 设置适配器*/
viewPager.setAdapter(new MyAdapter());
/** 设置到某个位置*/
viewPager.setCurrentItem(0);

class MyAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return Integer.MAX_VALUE;
    }
    /**3. 指定复用的判断逻辑, 固定写法*/
    @Override
    public boolean isViewFromObject(View view, Object object) {
        /** 当划到新的条目, 又返回来, view是否可以被复用.*/
        return view == object;
    }
    /** 1. 返回要显示的条目内容, 创建条目*/
    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        // container: 容器: ViewPager
        // position: 当前要显示条目的位置
        int newPosition = position % imageViewList.size();
        ImageView imageView = imageViewList.get(newPosition);
        // a. View对象添加到container        container.addView(imageView);
        return imageView;
    }

    /** 2. 销毁条目*/
    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((View) object);
    }
}

    (4)、开始进行轮播

/** 开启轮播*/
new Thread() {
    @Override
    public void run() {
        isRunning = true;
        while (isRunning) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            /** 往下跳一位*/
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Log.e(TAG,"设置当前位置: " + viewPager.getCurrentItem());
                    viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
                }
            });
        }
    }
}.start();

      (5)、在Androidmanifest.xml中添加权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

介绍到此结束,希望对大家有所帮助,demo代码如下:

项目源码






猜你喜欢

转载自blog.csdn.net/daxudada/article/details/79694190