您的位置:首页 > 移动开发 > 微信开发

Android用GridView排列相册,实现微信选择图片效果

2014-10-28 07:57 666 查看
转自http://blog.csdn.net/xiaoyuan511/article/details/39317313

许多项目都必须用到上传图片的功能,有了图片会更加精彩,最近我的项目也需要选择图片的功能,所以把我写的代码共享出来,也算是笔记吧!好,废话少说,下面看看效果图:



效果还可以,代码主要就是两个Activity剩下的都是一些辅助类,适配器什么的,首先先给大家看一下这个界面的代码

[java] view
plaincopy

package com.example.choosephotos;  

  

import java.io.Serializable;  

import java.util.List;  

  

  

import android.app.Activity;  

import android.content.Intent;  

import android.graphics.Bitmap;  

import android.graphics.BitmapFactory;  

import android.os.Bundle;  

import android.view.View;  

import android.widget.AdapterView;  

import android.widget.AdapterView.OnItemClickListener;  

import android.widget.GridView;  

  

public class ChoosePhotosActivity extends Activity {  

    List<ImageBucket> dataList;  

    GridView gridView;  

    ImageBucketAdapter adapter;// 自定义的适配器  

    AlbumHelper helper;  

    public static final String EXTRA_IMAGE_LIST = "imagelist";  

    public static Bitmap bimap;  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        // TODO Auto-generated method stub  

        super.onCreate(savedInstanceState);  

        setContentView(R.layout.act_image_bucket);  

        helper = AlbumHelper.getHelper();  

        helper.init(getApplicationContext());  

        initData();  

        initView();  

    }  

  

    /** 

     * 初始化数据 

     */  

    private void initData() {  

        dataList = helper.getImagesBucketList(false);     

        bimap=BitmapFactory.decodeResource(  

                getResources(),  

                R.drawable.icon_addpic_unfocused);  

    }  

  

    /** 

     * 初始化view视图 

     */  

    private void initView() {  

        gridView = (GridView) findViewById(R.id.gridview);  

        adapter = new ImageBucketAdapter(ChoosePhotosActivity.this, dataList);  

        gridView.setAdapter(adapter);  

  

        gridView.setOnItemClickListener(new OnItemClickListener() {  

  

            @Override  

            public void onItemClick(AdapterView<?> parent, View view,  

                    int position, long id) {  

                Intent intent = new Intent(ChoosePhotosActivity.this,  

                        ImageGridActivity.class);  

                intent.putExtra(ChoosePhotosActivity.EXTRA_IMAGE_LIST,  

                        (Serializable) dataList.get(position).imageList);  

                startActivityForResult(intent, 100);  

                finish();  

            }  

  

        });  

    }  

      

    @Override  

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {  

        super.onActivityResult(requestCode, resultCode, data);  

        if(resultCode!=Activity.RESULT_OK){  

            return;  

        }  

          

        switch (requestCode) {  

          

        case 100:  

            setResult(Activity.RESULT_OK);  

            finish();  

            break;  

  

        default:  

            break;  

        }  

    }  

}  

下面在看看另一界面的效果:



在大家看看这个页面的代码:

[java] view
plaincopy

package com.example.choosephotos;  

  

import java.io.IOException;  

import java.util.ArrayList;  

import java.util.Collection;  

import java.util.Iterator;  

import java.util.List;  

  

import com.example.choosephotos.ImageGridAdapter.TextCallback;  

  

  

  

import android.app.Activity;  

import android.content.Intent;  

import android.graphics.Bitmap;  

import android.graphics.BitmapFactory;  

import android.graphics.Color;  

import android.graphics.drawable.ColorDrawable;  

import android.os.Bundle;  

import android.os.Handler;  

import android.os.Message;  

import android.view.View;  

import android.view.View.OnClickListener;  

import android.widget.AdapterView;  

import android.widget.Button;  

import android.widget.ImageView;  

import android.widget.TextView;  

import android.widget.Toast;  

import android.widget.AdapterView.OnItemClickListener;  

import android.widget.GridView;  

  

public class ImageGridActivity extends Activity {  

    public static final String EXTRA_IMAGE_LIST = "imagelist";  

  

    List<ImageItem> dataList;  

    GridView gridView;  

    ImageGridAdapter adapter;  

    AlbumHelper helper;  

    Button bt;  

  

    Handler mHandler = new Handler() {  

        @Override  

        public void handleMessage(Message msg) {  

            switch (msg.what) {  

            case 0:  

                Toast.makeText(ImageGridActivity.this, "最多选择9张图片", 400).show();  

                break;  

  

            default:  

                break;  

            }  

        }  

    };  

  

    @Override  

    protected void onCreate(Bundle savedInstanceState) {  

        super.onCreate(savedInstanceState);  

  

        setContentView(R.layout.act_image_grid);  

        helper = AlbumHelper.getHelper();  

        helper.init(getApplicationContext());  

  

        dataList = (List<ImageItem>) getIntent().getSerializableExtra(  

                EXTRA_IMAGE_LIST);  

  

        initView();  

        bt = (Button) findViewById(R.id.bt);  

        bt.setOnClickListener(new OnClickListener() {  

  

            public void onClick(View v) {  

                ArrayList<String> list = new ArrayList<String>();  

                Collection<String> c = adapter.map.values();  

                Iterator<String> it = c.iterator();  

                for (; it.hasNext();) {  

                    list.add(it.next());  

                }  

  

                if (Bimp.act_bool) {  

                    setResult(Activity.RESULT_OK);  

                    Bimp.act_bool = false;  

                }  

                for (int i = 0; i < list.size(); i++) {  

                    if (Bimp.bmp.size() < 9) {     

                        try {  

                            Bitmap bm=Bimp.revitionImageSize(list.get(i));  

                            Bimp.bmp.add(bm);  

                              

                        } catch (IOException e) {  

                            e.printStackTrace();  

                        }  

                    }  

                }  

                      

                finish();  

            }  

  

        });  

    }  

    private void initView() {  

        gridView = (GridView) findViewById(R.id.gridview);  

        gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));  

        adapter = new ImageGridAdapter(ImageGridActivity.this, dataList,  

                mHandler);  

        gridView.setAdapter(adapter);  

        adapter.setTextCallback(new TextCallback() {  

            public void onListen(int count) {  

                bt.setText("完成" + "(" + count + ")");  

            }  

        });  

  

        gridView.setOnItemClickListener(new OnItemClickListener() {  

  

            @Override  

            public void onItemClick(AdapterView<?> parent, View view,  

                    int position, long id) {  

                adapter.notifyDataSetChanged();  

            }  

  

        });  

  

    }  

}  

这里我们判读Bimp.bmp的大小,只能让他选择9张

好了,效果实现完了,下面是源码的下载地址:

对了别忘记加权限:

[java] view
plaincopy

<uses-feature android:name="android.hardware.camera" />  

   <uses-feature android:name="android.hardware.camera.autofocus" />  

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

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

源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android
相关文章推荐