前言:今天开会讨论需求的时候,老板要求在最近做的APP上加一个类似朋友圈的东西,恰巧之前看到网上有很多仿朋友圈(图片多选)的例子,心血来潮就记录一下动态的发布吧。

        弹出框效果如下:

【GT-安卓应用开发之发布动态实现】

        我们的需求如下:

        1、发布内容可包括文字与图片

        2、支持拍照上传与图库选择

        3、点击查看大图,长按删除当前图片

        4、最大允许上传图片8张

        接下来,主要记录几个功能的实现方法:

        1、控制图库选择数量

        在这里我使用了第三方库ImageSelector实现图片的选择,调用其show方法调起图库选择器,并重写onActivityResult

,主要代码

ImageSelector.show(ClassCircleActivity.this, REQUEST_CODE_SELECT_IMG, MAX_SELECT_COUNT-mDataBit.size()+1);

       

public static void show(Activity activity, int requestCode, int maxCount) {
    Intent i = new Intent(activity, ImageSelectorActivity.class);
    i.putExtra("max", maxCount);
    activity.startActivityForResult(i, requestCode);
}

        从上面的代码我们可以看出三个参数分别是Activity,请求码和最大选择数,之所以第三个值我们传的是一个动态值,是因为用户可能分多次选取要上传的图片

        2、动态的发布

        我们利用Retrofit与后台进行交互,接口如下:

Call<ResponseBody> setFb(@Part("token") RequestBody token,@Part("content") RequestBody content,@Part List<MultipartBody.Part> partList);

         我们需要传递三个参数,一个是token,一个是文字内容,另外一个就是文件列表

        3、选择的照片渲染

        首先定义三个列表,分别存储路径、文件、Bitmap,并定义适配器来渲染数据,使用LRecyclerView来显示已经选择的图片,关键代码:

lRecyclerView = view.findViewById(R.id.bj_recycler);
mFindAdapterBit = new FindAdapter(ClassCircleActivity.this, R.layout.class_cricle_recycler_item, "classbj");
mFindAdapterBit.clear();
mDataBit.clear();
mDataBit.add(bmp);
mFindAdapterBit.addAll(mDataBit);
mLRecyclerViewAdapterBit = new LRecyclerViewAdapter(mFindAdapterBit);
MyGridLayoutManager manager = new MyGridLayoutManager(MyApplication.getContextObject(), 4, LinearLayoutManager.VERTICAL, false);
lRecyclerView.setLayoutManager(manager);
lRecyclerView.setAdapter(mLRecyclerViewAdapterBit);
lRecyclerView.setLoadMoreEnabled(false);
lRecyclerView.setPullRefreshEnabled(false);
newDialog = new DialogCircle(this, DensityUtil.dip2px(this, widthHeight.width() / 2), DensityUtil.dip2px(this, widthHeight.height()-200), view,
        R.style.dialog2);
newDialog.setCancelable(false);
mLRecyclerViewAdapterBit.setOnItemClickListener(new OnItemClickListener() {
    @Override
    public void onItemClick(View view, int position) {
        if (position == mDataBit.size() - 1) {
            if(mDataBit.size()<9) {
                selectPhoto();
            }else{
                Toast.makeText(MyApplication.getContextObject(),"最多上传8张图片",Toast.LENGTH_SHORT).show();
            }
        }else{
            Intent intent = new Intent(ClassCircleActivity.this, LargeImageActivity.class);
            intent.putExtra("imgurl",paths.get(position));
            startActivity(intent);
        }
    }
});
mLRecyclerViewAdapterBit.setOnItemLongClickListener(new OnItemLongClickListener() {
    @Override
    public void onItemLongClick(View view, int position) {
        paths.remove(position);
        mDataBit.remove(position);
        mFindAdapterBit.setDataList(mDataBit);
        mLRecyclerViewAdapterBit.notifyDataSetChanged();
    }
});

相关文章: