android自定义相册的功能实现

来源:互联网 发布:云计算 视界云 知乎 编辑:程序博客网 时间:2024/05/21 15:48

 

         做java开发的也会接触到android开发。前段时间我在做android开发时候遇到一个问题就是自定义相册。

        其实简单来说分两步:第一,先查询出本机所有图片的路径。第二,把查询出的路径放到GridView控件里面。


       接下来上具体的代码了:

      1.取图片路径:

       /**
          * 图片文件路径
         */
     private ArrayList<String> filePath = new ArrayList<String>();


       /**
         * 查询系统所有图片地址
        */
    private void serchPhoto() {
        filePath.clear();
        new Thread(new Runnable() {
            @Override
            public void run() {
                Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
                ContentResolver mContentResolver = getContentResolver();
                // 只查询jpeg和png的图片
                Cursor mCursor = mContentResolver.query(mImageUri, null,
                        MediaStore.Images.Media.MIME_TYPE + "=? or "
                                + MediaStore.Images.Media.MIME_TYPE + "=?"
                                + " or " + MediaStore.Images.Media.MIME_TYPE
                                + "=?", new String[]{"image/jpeg",
                                "image/png", "image/jpg"},
                        MediaStore.Images.Media.DATE_MODIFIED);

                Log.e("TAG", mCursor.getCount() + "===" +filePath.toString());
                while (mCursor.moveToNext()) {
                    // 获取图片的路径
                    String path = mCursor.getString(mCursor
                            .getColumnIndex(MediaStore.Images.Media.DATA));
                    Log.v("dongjie", "path==" + path);
                    filePath.add(path);
                }
                mCursor.close();
                Message msg = Message.obtain();
                //msg.obj = json;
                msg.what = 0x110;
                handler.sendMessage(msg);
            }
        }).start();
    }


  2.新建一个photoActivity   再新建一个对应的adpter适配器MoreChatAdpter  还有布局文件photo.xml

      photo.xml  :

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#F3F4F5"
    android:orientation="vertical" >

    <!--相册头部title-->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="@android:color/white" >
      
      <!-- <Button
            android:id="@+id/btn_back"
            android:layout_width="22dp"
            android:layout_height="22dp"
            android:layout_centerVertical="true"
            android:layout_marginLeft="15dp"
            android:background="@drawable/btn_back" /> -->

        <TextView
            android:layout_width="62dp"
            android:layout_height="19dp"
            android:layout_centerInParent="true"
            android:layout_centerVertical="true"
            android:text="相册"
            android:textColor="#333333"
            android:textSize="16sp" />

        <Button
            android:id="@+id/btn_upload"
            android:layout_width="60dp"
            android:layout_height="24dp"
            android:layout_alignParentRight="true"
            android:layout_centerVertical="true"
            android:layout_marginRight="10dp"
            android:background="@color/all_white"
            android:text="取消"
            android:textColor="@android:color/background_dark" />
    
    </RelativeLayout>

    <!--相册body布局-->
    <GridView
        android:id="@+id/gridview"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:cacheColorHint="@android:color/transparent"
        android:clipChildren="true"
        android:gravity="center"
        android:horizontalSpacing="1dip"
        android:listSelector="@android:color/transparent"
        android:numColumns="4"
        android:stretchMode="columnWidth"
        android:verticalSpacing="1dip" />

</LinearLayout>

        

      MoreChatAdpter.java       :

 

             /**
 * 相册适配器
 * @author dongkaiming
 */
public class MoreChatAdpter extends BaseAdapter {

    public List<String> filePath;

    private LayoutInflater layoutInflater;
    private Context context;

    public MoreChatAdpter(Context context, List<String> filePath) {
        layoutInflater = LayoutInflater.from(context);
        this.filePath = filePath;
        this.context = context;
    }

    @Override
    public int getCount() {
        if (filePath == null) {
            return 1;
        }
        return filePath.size() + 1;
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return filePath.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        HolderView holderView = null;
        if (convertView == null) {
            holderView = new HolderView();
            convertView = layoutInflater.inflate(R.layout.grid_item, null);
            holderView.photoImage = (ImageView) convertView
                    .findViewById(R.id.id_item_image);
            holderView.selectImage = (ImageView) convertView
                    .findViewById(R.id.id_select_item);
            holderView.img_camner= convertView.findViewById(R.id.img_camner);
            setHeight(holderView.photoImage);
            convertView.setTag(holderView);
        }
            holderView = (HolderView) convertView.getTag();
            if(position==0){
                holderView.img_camner.setVisibility(View.VISIBLE);
                setHeight(holderView.img_camner);
            }else{
                File file = new File(filePath.get(position-1));
                Glide.with(context).load(file).centerCrop().crossFade()
                .into(holderView.photoImage);
                holderView.img_camner.setVisibility(View.GONE);
            }
               return convertView;
    }

    /**
     * 设值每张相片的高度
     * @param view
     */
    public void setHeight(View view) {
        LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
        layoutParams.height = getLayoutHeight();
        view.setLayoutParams(layoutParams);
    }
    
    public void setWidth(View view){
        LayoutParams layoutParams = (LayoutParams) view.getLayoutParams();
        layoutParams.width = getLayoutWidth();
        view.setLayoutParams(layoutParams);
    }

    /**
     * 预设值每张相片的高度
     */
    public int getLayoutHeight() {
        int width = Tools.getScreenWidth() - 2 * 4;
        return width / 4;
    }
    
    public int getLayoutWidth(){
        int width = Tools.getScreenWidth() - 2 * 4;
        return width / 4;
    }
    
    /**
     * view mode
     * @author dongkaiming
     */
    public class HolderView {
        public ImageView photoImage;
        public ImageView selectImage;
        public View img_camner;
        
    }

}

    

           最后在photoActivity.java  里的onCreate()方法里面实例化MoreChatAdpter并传入对应的参数即可。

            path = intent.getStringArrayListExtra("path");     //path就是上面查询的图片路径。
         

            MoreChatAdpter moreChatAdpter = new MoreChatAdpter(this, path);



            好了,就是这样,请大家指教!

        

 




                 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 视频从U盘传下来不能播放怎么办 微博账号忘了登录名怎么办 迅雷应版权方要求无法下载怎么办? 微信账号忘记密码上面有钱怎么办 蘑菇街账号忘记了里面有钱怎么办 手机注册的百度云帐号换号怎么办 网易云音乐sd卡写入失败怎么办? 玩客云涌u盘满了怎么办 手机安装杜比音效失败死机该怎么办 网易云音乐下载额度用完了怎么办 苹果手机付费app连续扣费怎么办 oppoO粉卡的流量用没了怎么办 qq邮箱里的文件过期了怎么办 163邮箱里的文件过期了怎么办 做人事的给员工漏交社保了怎么办 公司漏交了员工一个月的社保怎么办 小米4c能充电不能开机怎么办 小米手机关机开不开机该怎么办 小米5s关机开不开机怎么办 老板跑路了员工社保还挂着怎么办 红米5连wifi很慢怎么办 电脑百度网盘下载速度慢怎么办 新手机与旧手机同步了怎么办 百度网盘2t满了怎么办 魅族手机相册的密码忘了怎么办 手机百度网盘本地空间不足怎么办 百度网盘保存视频内存不够怎么办 别人的百度网盘链接打不开怎么办 百度网盘视频插件升级失败怎么办 退苹果id重新登陆照片没了怎么办 苹果升级后照片效果没了怎么办 360云盘个人云盘停止服务怎么办 小米手机账号掉了手机卡没了怎么办 百度网盘下载后不能注册怎么办 微信发出的文件无法撤回怎么办 微信群发错消息无法撤回怎么办 百度网盘登录要验证码怎么办 百度网盘备份记录怎么办能删掉 手机酷狗听歌耳机声音太小了怎么办 苹果6s微信通话声音变粗怎么办 千千静听多个列表合成一个了怎么办