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

来源:互联网 发布:mac如何下载魔兽世界 编辑:程序博客网 时间:2024/04/30 06:30

转自http://blog.csdn.net/xiaoyuan511/article/details/39317313

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


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

[java] view plaincopy
  1. package com.example.choosephotos;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.List;  
  5.   
  6.   
  7. import android.app.Activity;  
  8. import android.content.Intent;  
  9. import android.graphics.Bitmap;  
  10. import android.graphics.BitmapFactory;  
  11. import android.os.Bundle;  
  12. import android.view.View;  
  13. import android.widget.AdapterView;  
  14. import android.widget.AdapterView.OnItemClickListener;  
  15. import android.widget.GridView;  
  16.   
  17. public class ChoosePhotosActivity extends Activity {  
  18.     List<ImageBucket> dataList;  
  19.     GridView gridView;  
  20.     ImageBucketAdapter adapter;// 自定义的适配器  
  21.     AlbumHelper helper;  
  22.     public static final String EXTRA_IMAGE_LIST = "imagelist";  
  23.     public static Bitmap bimap;  
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         // TODO Auto-generated method stub  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.act_image_bucket);  
  29.         helper = AlbumHelper.getHelper();  
  30.         helper.init(getApplicationContext());  
  31.         initData();  
  32.         initView();  
  33.     }  
  34.   
  35.     /** 
  36.      * 初始化数据 
  37.      */  
  38.     private void initData() {  
  39.         dataList = helper.getImagesBucketList(false);     
  40.         bimap=BitmapFactory.decodeResource(  
  41.                 getResources(),  
  42.                 R.drawable.icon_addpic_unfocused);  
  43.     }  
  44.   
  45.     /** 
  46.      * 初始化view视图 
  47.      */  
  48.     private void initView() {  
  49.         gridView = (GridView) findViewById(R.id.gridview);  
  50.         adapter = new ImageBucketAdapter(ChoosePhotosActivity.this, dataList);  
  51.         gridView.setAdapter(adapter);  
  52.   
  53.         gridView.setOnItemClickListener(new OnItemClickListener() {  
  54.   
  55.             @Override  
  56.             public void onItemClick(AdapterView<?> parent, View view,  
  57.                     int position, long id) {  
  58.                 Intent intent = new Intent(ChoosePhotosActivity.this,  
  59.                         ImageGridActivity.class);  
  60.                 intent.putExtra(ChoosePhotosActivity.EXTRA_IMAGE_LIST,  
  61.                         (Serializable) dataList.get(position).imageList);  
  62.                 startActivityForResult(intent, 100);  
  63.                 finish();  
  64.             }  
  65.   
  66.         });  
  67.     }  
  68.       
  69.     @Override  
  70.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
  71.         super.onActivityResult(requestCode, resultCode, data);  
  72.         if(resultCode!=Activity.RESULT_OK){  
  73.             return;  
  74.         }  
  75.           
  76.         switch (requestCode) {  
  77.           
  78.         case 100:  
  79.             setResult(Activity.RESULT_OK);  
  80.             finish();  
  81.             break;  
  82.   
  83.         default:  
  84.             break;  
  85.         }  
  86.     }  
  87. }  
下面在看看另一界面的效果:


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

[java] view plaincopy
  1. package com.example.choosephotos;  
  2.   
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.Collection;  
  6. import java.util.Iterator;  
  7. import java.util.List;  
  8.   
  9. import com.example.choosephotos.ImageGridAdapter.TextCallback;  
  10.   
  11.   
  12.   
  13. import android.app.Activity;  
  14. import android.content.Intent;  
  15. import android.graphics.Bitmap;  
  16. import android.graphics.BitmapFactory;  
  17. import android.graphics.Color;  
  18. import android.graphics.drawable.ColorDrawable;  
  19. import android.os.Bundle;  
  20. import android.os.Handler;  
  21. import android.os.Message;  
  22. import android.view.View;  
  23. import android.view.View.OnClickListener;  
  24. import android.widget.AdapterView;  
  25. import android.widget.Button;  
  26. import android.widget.ImageView;  
  27. import android.widget.TextView;  
  28. import android.widget.Toast;  
  29. import android.widget.AdapterView.OnItemClickListener;  
  30. import android.widget.GridView;  
  31.   
  32. public class ImageGridActivity extends Activity {  
  33.     public static final String EXTRA_IMAGE_LIST = "imagelist";  
  34.   
  35.     List<ImageItem> dataList;  
  36.     GridView gridView;  
  37.     ImageGridAdapter adapter;  
  38.     AlbumHelper helper;  
  39.     Button bt;  
  40.   
  41.     Handler mHandler = new Handler() {  
  42.         @Override  
  43.         public void handleMessage(Message msg) {  
  44.             switch (msg.what) {  
  45.             case 0:  
  46.                 Toast.makeText(ImageGridActivity.this"最多选择9张图片"400).show();  
  47.                 break;  
  48.   
  49.             default:  
  50.                 break;  
  51.             }  
  52.         }  
  53.     };  
  54.   
  55.     @Override  
  56.     protected void onCreate(Bundle savedInstanceState) {  
  57.         super.onCreate(savedInstanceState);  
  58.   
  59.         setContentView(R.layout.act_image_grid);  
  60.         helper = AlbumHelper.getHelper();  
  61.         helper.init(getApplicationContext());  
  62.   
  63.         dataList = (List<ImageItem>) getIntent().getSerializableExtra(  
  64.                 EXTRA_IMAGE_LIST);  
  65.   
  66.         initView();  
  67.         bt = (Button) findViewById(R.id.bt);  
  68.         bt.setOnClickListener(new OnClickListener() {  
  69.   
  70.             public void onClick(View v) {  
  71.                 ArrayList<String> list = new ArrayList<String>();  
  72.                 Collection<String> c = adapter.map.values();  
  73.                 Iterator<String> it = c.iterator();  
  74.                 for (; it.hasNext();) {  
  75.                     list.add(it.next());  
  76.                 }  
  77.   
  78.                 if (Bimp.act_bool) {  
  79.                     setResult(Activity.RESULT_OK);  
  80.                     Bimp.act_bool = false;  
  81.                 }  
  82.                 for (int i = 0; i < list.size(); i++) {  
  83.                     if (Bimp.bmp.size() < 9) {     
  84.                         try {  
  85.                             Bitmap bm=Bimp.revitionImageSize(list.get(i));  
  86.                             Bimp.bmp.add(bm);  
  87.                               
  88.                         } catch (IOException e) {  
  89.                             e.printStackTrace();  
  90.                         }  
  91.                     }  
  92.                 }  
  93.                       
  94.                 finish();  
  95.             }  
  96.   
  97.         });  
  98.     }  
  99.     private void initView() {  
  100.         gridView = (GridView) findViewById(R.id.gridview);  
  101.         gridView.setSelector(new ColorDrawable(Color.TRANSPARENT));  
  102.         adapter = new ImageGridAdapter(ImageGridActivity.this, dataList,  
  103.                 mHandler);  
  104.         gridView.setAdapter(adapter);  
  105.         adapter.setTextCallback(new TextCallback() {  
  106.             public void onListen(int count) {  
  107.                 bt.setText("完成" + "(" + count + ")");  
  108.             }  
  109.         });  
  110.   
  111.         gridView.setOnItemClickListener(new OnItemClickListener() {  
  112.   
  113.             @Override  
  114.             public void onItemClick(AdapterView<?> parent, View view,  
  115.                     int position, long id) {  
  116.                 adapter.notifyDataSetChanged();  
  117.             }  
  118.   
  119.         });  
  120.   
  121.     }  
  122. }  

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

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

对了别忘记加权限:

[java] view plaincopy
  1. <uses-feature android:name="android.hardware.camera" />  
  2.    <uses-feature android:name="android.hardware.camera.autofocus" />  
  3.    <uses-permission android:name="android.permission.CAMERA" />  
  4.    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  


源码下载


0 0
原创粉丝点击