android 获取相册列表的实现(二)

项目实现的功能如下:

获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能。

该项目最大特色:

1、获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取。

2、使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的。同时,通过引用第三方jar可以有效解决OOM异常问题。

链接android 获取相册列表的实现(一)

继续上一篇博文的讲述,上一篇博文中通过一个异步加载类实现了获取本地相册和本地图片的数据,本篇博文主要讲述相册列表界面的实现,首先给出相册列表Activity类代码如下:

public class AlbumsActivity extends Activity {

    private GridView gridView;
    private AlbumsAdapter adapter;//适配器
    private PhotoUpAlbumHelper photoUpAlbumHelper;//加载相册和图片的异步线程类
    private List<PhotoUpImageBucket> list;//存放相册列表数据
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.albums_gridview);
        init();//初始化
        loadData();//加载数据
        onItemClick();//设置相册点击事件
    }
    private void init(){
        gridView = (GridView) findViewById(R.id.album_gridv);
        adapter = new AlbumsAdapter(AlbumsActivity.this);
        gridView.setAdapter(adapter);
    }

    private void loadData(){
        photoUpAlbumHelper = PhotoUpAlbumHelper.getHelper();//创建异步线程实例
        photoUpAlbumHelper.init(AlbumsActivity.this);//初始化实例
        //回调接口,创建匿名内部对象,实现接口中的方法,获取到PhotoUpAlbumHelper的接口GetAlbumList所传递的数据
        photoUpAlbumHelper.setGetAlbumList(new GetAlbumList() {
            @Override
            public void getAlbumList(List<PhotoUpImageBucket> list) {
                adapter.setArrayList(list);
                adapter.notifyDataSetChanged();//更新视图
                AlbumsActivity.this.list = list;
            }
        });
        photoUpAlbumHelper.execute(false);//异步线程执行
    }
    //通过点击每个相册,进入相册内部查看该相册内的图片
    private void onItemClick(){
        gridView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                Intent intent = new Intent(AlbumsActivity.this,AlbumItemActivity.class);
                intent.putExtra("imagelist", list.get(position));
                startActivity(intent);
            }
        });
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
    }
}

相册列表界面比较简单,不能懂,下面给出该界面的适配器代码,适配器代码采用重写非常常见的BaseAdapter类实现,也很简单,主要的特色在于采用第三方的jar包Android-Universal-Image-Loader实现相册封面的加载:

public class AlbumsAdapter extends BaseAdapter {

    private List<PhotoUpImageBucket> arrayList;
    private LayoutInflater layoutInflater;
    private ImageLoader imageLoader = ImageLoader.getInstance();//初始化获取实例
    private DisplayImageOptions options;
    private String TAG = AlbumsAdapter.class.getSimpleName();//开发测试标记位
    public AlbumsAdapter(Context context){
        layoutInflater = LayoutInflater.from(context);
        arrayList = new ArrayList<PhotoUpImageBucket>();//初始化集合
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(context)
        .threadPriority(Thread.NORM_PRIORITY - 2)
        .denyCacheImageMultipleSizesInMemory()
        .discCacheFileNameGenerator(new Md5FileNameGenerator())
        .tasksProcessingOrder(QueueProcessingType.LIFO)
        .memoryCacheExtraOptions(96, 120)
        .build();//初始化图片加载器的配置
        // Initialize ImageLoader with configuration.
        imageLoader.init(config);

        // 使用DisplayImageOption.Builder()创建DisplayImageOptions
        options = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.default_loading_pic) // 设置图片下载期间显示的图片
                .showImageForEmptyUri(R.drawable.default_loading_pic) // 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.default_loading_pic) // 设置图片加载或解码过程中发生错误显示的图片
                .cacheInMemory(true) // 设置下载的图片是否缓存在内存中
                .cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中
                // .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
                .bitmapConfig(Config.RGB_565)
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                .build(); // 创建配置过的DisplayImageOption对象
        //上面的默认图片或者无法加载情况下的图片开发者可以自己设置,当然,可以设置不同的显示图片。我这里为了方便,采用同一幅图片作为默认图片
    };
    @Override
    public int getCount() {
        return arrayList.size();
    }

    @Override
    public Object getItem(int position) {
        return arrayList.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        Holder holder;
        if (convertView == null) {
            holder = new Holder();
            convertView = layoutInflater.inflate(R.layout.ablum_item, parent, false);
            holder.image = (ImageView) convertView.findViewById(R.id.image);
            holder.name = (TextView) convertView.findViewById(R.id.name);
            holder.count = (TextView) convertView.findViewById(R.id.count);
            convertView.setTag(holder);
        }else {
            holder = (Holder) convertView.getTag();
        }
        holder.count.setText(""+arrayList.get(position).getCount());
        holder.name.setText(arrayList.get(position).getBucketName());

        //图片加载器的使用代码,就这一句代码即可实现图片的加载。请注意这里的uri地址,因为我们现在实现的是获取本地图片,所以使用"file://"+图片的存储地址。如果要获取网络图片,这里的uri就是图片的网络地址。
                imageLoader.displayImage("file://"+arrayList.get(position).getImageList().get(0).getImagePath(),
                holder.image, options);
        return convertView;
    }

    class Holder{
        ImageView image;
        TextView name;
        TextView count;
    }
    //设置相册列表数据,主要用于把相册数据传递到Adapter中
    public void setArrayList(List<PhotoUpImageBucket> arrayList) {
        this.arrayList = arrayList;
    }
}

整个相册列表的界面代码还是比较简单的。下一篇博文讲述android 获取相册列表的实现(三)

时间: 2024-10-18 17:11:17

android 获取相册列表的实现(二)的相关文章

android 获取相册列表的实现(三)

该项目实现的功能如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能. 该项目最大特色: 1.获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取. 2.使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的.同时,通过引用第三方

android 获取相册列表的实现(四)

该项目实现的功能如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能. 该项目最大特色: 1.获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取. 2.使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的.同时,通过引用第三方

android 获取相册列表的实现(一)

该项目实现的功能如下: 获取手机相册,点击每个相册之后进入该相册的图片列表界面,在图片列表界面可以实现图片多选,然后进入所选择的图片界面,在该界面内可以实现所选图片的上传等功能. 该项目最大特色: 1.获取相册列表,目前网络上面介绍获取相册的项目很少,本文专门讲述相册的获取. 2.使用Android-Universal-Image-Loader集成框架-第三方jar包加载本地图片,熟悉这个jar的开发者肯定不陌生,该jar包十分强大,除了可以获取网络图片,本地图片也是可以的.同时,通过引用第三方

转:ecshop商品分类页获取相册列表方法

ecshop商品分类页获取相册列表方法 很久之前就看到过你好在商品列表页有获取到相册列表,但是一直没有实践过,感觉应该挺简单的吧,但是最近手上的项目刚好就需要这个功能,然后就想到网上查下资料,至少找个思路就好办了,可是百度谷歌,居然没有找到任何答案.只是在百度知道看到有人提过这个问题,居然没有答案! 搜索这个线索断了,我们还有B计划,就是自己开发,哈哈.网上有人问过这个问题,但是回答的人就是说要二次开发啊什么的,当然,你好默认的功能没那么完善,需要我们进一步修改一下下,但是二次开发也不是说真的这

android获取传感器列表

本文介绍如何获取android设备所支持的传感器列表. 目前,android 4.4 (API等级19)支持以下传感器: TYPE_ACCELEROMETER 加速度传感器,单位是m/s2,测量应用于设备X.Y.Z轴上的加速度 传感器类型值(Sensor Type):1 (0x00000001) TYPE_AMBIENT_TEMPERATURE 温度传感器,单位是℃ 传感器类型值(Sensor Type): 13 (0x0000000d) TYPE_GAME_ROTATION_VECTOR 游戏

Qt for android 获取 Wifi 列表

Qt 做 Android 开发,有时候需要网络信息,这个例子是获取手机搜索到的信号较强的 WIFI 信号的列表.过程中需要用到 JNI 的知识.另外,例子比较简单,如果有需要这个的,可以自行修改. 程序分为两个部分,一个是 JAVA 程序的编写,一个是 Qt 主程序的编写,至于对 AndroidManifest.xml 文件的修改部分我就不加缀述了. JAVA 程序部分: package com.wifi; import android.net.wifi.ScanResult; import a

ecshop商品分类页获取相册列表方法

第1步:找到根目录的category.php文件,查找约:486行左右(注意这不是准确位置,看实际的哦),找到这个函数: /** * 获得分类下的商品 * * @access public * @param string $children * @return array */ function category_get_goods($children, $brand, $min, $max, $ext, $size, $page, $sort, $order) ……以下代码省略. 然后在这个函

Android获取相册图片

1. AlertDialog的使用 2. 显示和隐式意图的区别 3. 相册页面的跳转 4. 选择完成后返回图片的获取 -------------------------------------------------------------- 工程源码: -------------------------------------------------------------- 1. AlertDialog的使用 2. 显示和隐式意图的区别 3. 相册页面的跳转 4. 选择完成后返回图片的获取

Android 获取进程列表

有时候我们需要获取进行的PID好,好执行kill命令 ActivityManager mActivityManager = (ActivityManager)this.getSystemService(ACTIVITY_SERVICE); List<ActivityManager.RunningAppProcessInfo> mRunningProcess = mActivityManager.getRunningAppProcesses(); for (ActivityManager.Run