關於仿微信朋友圈(一)

 

圖一:             圖二:java

activity_publish_dynamic.xml:android

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:orientation="vertical">

    <RelativeLayout
        android:id="@+id/rl_top_title_basic"
        android:layout_width="match_parent"
        android:layout_height="@dimen/top_bar_height"
        android:background="@color/white">

        <include layout="@layout/rl_back_top_black_image" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_centerInParent="true"
            android:gravity="center_vertical"
            android:text="發表動態"
            android:textColor="@color/text_color_little_title"
            android:textSize="@dimen/topBar_centerTextsize" />

        <TextView
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:layout_alignParentBottom="true"
            android:background="#d3d3d3" />

        <TextView
            android:id="@+id/tv_publish_context"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_alignParentRight="true"
            android:layout_marginRight="10dp"
            android:gravity="center_vertical"
            android:text="發表"
            android:textColor="@color/text_color_little_title"
            android:textSize="15dp" />
    </RelativeLayout>

    <EditText
        android:id="@+id/et_publish_dynamic_content"
        android:layout_width="match_parent"
        android:layout_height="190dp"
        android:layout_below="@id/rl_top_title_basic"
        android:background="@color/white"
        android:gravity="top"
        android:hint="此刻想分享點什麼…"
        android:inputType="textMultiLine"
        android:paddingBottom="@dimen/text_size_10dp"
        android:paddingLeft="@dimen/text_size_10dp"
        android:paddingRight="@dimen/text_size_10dp"
        android:paddingTop="@dimen/text_size_20dp"
        android:textColor="@color/text_color_little_title"
        android:textColorHint="@color/text_address_hint"
        android:textSize="@dimen/text_size_16dp" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="0.25dp"
        android:layout_below="@id/et_publish_dynamic_content"
        android:background="#d3d3d3" />

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recyclerView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/et_publish_dynamic_content"
        android:layout_marginTop="@dimen/text_size_10dp"
        android:choiceMode="singleChoice"
        android:divider="@null"
        android:listSelector="@android:color/transparent"
        android:paddingLeft="@dimen/text_size_31dp"
        android:paddingRight="@dimen/text_size_31dp"
        android:scrollbarStyle="outsideOverlay"
        app:layoutManager="android.support.v7.widget.GridLayoutManager"
        app:spanCount="3"
        tools:listitem="@layout/list_item_dynamic_image" />

    <LinearLayout
        android:id="@+id/ll_publish_dynamic"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="@dimen/text_size_18dp"
        android:layout_marginLeft="@dimen/text_size_25dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:paddingBottom="8dp"
            android:paddingLeft="16dp"
            android:paddingRight="16dp"
            android:paddingTop="8dp"
            android:text="發表於"
            android:textSize="@dimen/text_size_16dp" />           
    </LinearLayout>
</RelativeLayout>

PublishDynamicActivity:app

package com.shougang.shiftassistant.ui.activity.organize;

import android.content.Context;
import android.content.Intent;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.KeyEvent;
import android.view.View;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;

import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.bean.ImageItem;
import com.lzy.imagepicker.ui.ImageGridActivity;
import com.lzy.imagepicker.ui.ImagePreviewDelActivity;
import com.lzy.imagepicker.view.CropImageView;
import com.shougang.shiftassistant.R;
import com.shougang.shiftassistant.common.MyConstant;
import com.shougang.shiftassistant.common.ToastUtils;
import com.shougang.shiftassistant.ui.activity.MainActivity;
import com.shougang.shiftassistant.ui.activity.base.BaseNormalActivity;
import com.shougang.shiftassistant.ui.adapter.ImagePickerAdapter;
import com.shougang.shiftassistant.ui.view.AndroidBug5497Workaround;
import com.shougang.shiftassistant.ui.view.SoftKeyBoardListener;
import com.shougang.shiftassistant.ui.view.dialog.SelectDialog;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.OnClick;
public class PublishDynamicActivity extends BaseNormalActivity implements ImagePickerAdapter.OnItemClickListener, RadioGroup.OnCheckedChangeListener {

    //右上角發表動態按鈕
    @BindView(R.id.tv_publish_context)
    TextView tv_publish_context;
    //編寫動態內容
    @BindView(R.id.et_publish_dynamic_content)
    EditText et_publish_dynamic_content;
    //發佈我的動態
    @BindView(R.id.rb_personal_dynamic)
    RadioButton rb_personal_dynamic;
    //發佈組織公告
    @BindView(R.id.rb_org_notice)
    RadioButton rb_org_notice;
    @BindView(R.id.rg_group)
    RadioGroup rg_group;
    @BindView(R.id.ll_publish_dynamic)
    LinearLayout ll_publish_dynamic;

    public static final int REQUEST_CODE_SELECT = 100;
    public static final int REQUEST_CODE_PREVIEW = 101;

    private ImagePickerAdapter adapter;
    private ArrayList<ImageItem> selImageList; //當前選擇的全部圖片
    ArrayList<ImageItem> images = null;

    @Override
    protected View initView() {
        return View.inflate(context, R.layout.activity_publish_dynamic, null);
    }

    @Override
    protected void initData() {
        initWidget();
        rg_group.setOnCheckedChangeListener(this);
        SoftKeyBoardListener.setListener(PublishDynamicActivity.this, new SoftKeyBoardListener.OnSoftKeyBoardChangeListener() {
            @Override
            public void keyBoardShow(int height) {
                ll_publish_dynamic.setVisibility(View.INVISIBLE);
            }

            @Override
            public void keyBoardHide(int height) {
                ll_publish_dynamic.setVisibility(View.VISIBLE);
            }
        });
    }

    @OnClick({R.id.tv_publish_context})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.tv_publish_context:
                break;
        }
    }

    private void initWidget() {
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        selImageList = new ArrayList<>();
        adapter = new ImagePickerAdapter(this, selImageList, MyConstant.MAX_DYNAMIC_PIC_NUM);
        adapter.setOnItemClickListener(this);
        recyclerView.setLayoutManager(new GridLayoutManager(this, 3));
        recyclerView.setHasFixedSize(true);
        recyclerView.setAdapter(adapter);
    }

    private SelectDialog showDialog(SelectDialog.SelectDialogListener listener, List<String> names) {
        SelectDialog dialog = new SelectDialog(this, R.style.transparentFrameWindowStyle,
                listener, names);
        if (!this.isFinishing()) {
            dialog.show();
        }
        return dialog;
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == ImagePicker.RESULT_CODE_ITEMS) {
            //添加圖片返回
            if (data != null && requestCode == REQUEST_CODE_SELECT) {
                images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_RESULT_ITEMS);
                if (images != null) {
                    selImageList.addAll(images);
                    adapter.notifyDataSetChanged();
                }
            }
        } else if (resultCode == ImagePicker.RESULT_CODE_BACK) {
            //預覽圖片返回
            if (data != null && requestCode == REQUEST_CODE_PREVIEW) {
                images = (ArrayList<ImageItem>) data.getSerializableExtra(ImagePicker.EXTRA_IMAGE_ITEMS);
                if (images != null) {
                    selImageList.clear();
                    selImageList.addAll(images);
                    adapter.notifyDataSetChanged();
                }
            }
        }
    }

    @Override
    public void onCheckedChanged(RadioGroup group, int checkedId) {
        switch (checkedId) {
            case R.id.rb_personal_dynamic:
                ToastUtils.show(context, "發佈我的動態成功");
                break;
            case R.id.rb_org_notice:
                ToastUtils.show(context, "發佈組織公告成功");
                break;
        }
    }

    @Override
    public void onClickAdd(int position) {
        List<String> names = new ArrayList<>();
        names.add("拍照");
        names.add("相冊");
        showDialog(new SelectDialog.SelectDialogListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                switch (position) {
                    case 0: // 直接調起相機
                        //打開選擇,本次容許選擇的數量
          ImagePicker.getInstance().setSelectLimit(MyConstant.MAX_DYNAMIC_PIC_NUM - selImageList.size());
                        Intent intent = new Intent(context, ImageGridActivity.class);
                        intent.putExtra(ImageGridActivity.EXTRAS_TAKE_PICKERS, true); // 是不是直接打開相機
                        startActivityForResult(intent, REQUEST_CODE_SELECT);
                        break;
                    case 1:
                        //打開選擇,本次容許選擇的數量
          ImagePicker.getInstance().setSelectLimit(MyConstant.MAX_DYNAMIC_PIC_NUM - selImageList.size());
                        Intent intent1 = new Intent(context, ImageGridActivity.class);
                        startActivityForResult(intent1, REQUEST_CODE_SELECT);
                        break;
                    default:
                        break;
                }
            }
        }, names);
    }
    @Override
    public void onClickImage(int position) {
//單擊放大縮小 ?
    }

    @Override
    public void onClickDelete(int position) {
        selImageList.remove(position);
        adapter.notifyDataSetChanged();
    }
}

ImagePickerAdapter:ide

package com.shougang.shiftassistant.ui.adapter;
import android.app.Activity;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.lzy.imagepicker.ImagePicker;
import com.lzy.imagepicker.bean.ImageItem;
import com.shougang.shiftassistant.R;
import java.util.ArrayList;
import java.util.List;
public class ImagePickerAdapter extends RecyclerView.Adapter<ImagePickerAdapter.SelectedPicViewHolder> {
    private int maxImgCount;
    private Context mContext;
    private List<ImageItem> mData;
    private LayoutInflater mInflater;
    private OnItemClickListener listener;
    public void setOnItemClickListener(OnItemClickListener listener) {
        this.listener = listener;
    }
    public void setImages(List<ImageItem> data) {
        mData = new ArrayList<>(data);
        notifyDataSetChanged();
    }

    public ImagePickerAdapter(Context mContext, List<ImageItem> data, int maxImgCount) {
        this.mContext = mContext;
        this.maxImgCount = maxImgCount;
        this.mInflater = LayoutInflater.from(mContext);
        this.mData=data;
    }

    @Override
    public SelectedPicViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        return new SelectedPicViewHolder(mInflater.inflate(R.layout.list_item_vertify_image, parent, false));
    }

    @Override
    public void onBindViewHolder(SelectedPicViewHolder holder, final int position) {
        switch (getItemViewType(position)){
            case TYPE_NORMAL:
                ImageItem imageItem = mData.get(position);
                ImagePicker.getInstance().getImageLoader().displayImage((Activity) mContext, imageItem.path, holder.iv_img, 0, 0);

                holder.iv_del.setVisibility(View.VISIBLE);
                holder.iv_img.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(listener!=null){
                            listener.onClickImage(position);
                        }
                    }
                });
                break;
            case TYPE_ADD:
                holder.iv_img.setImageResource(R.drawable.selector_image_add);
                holder.iv_del.setVisibility(View.GONE);
                holder.iv_img.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if(listener!=null){
                            listener.onClickAdd(position);
                        }
                    }
                });
                break;
        }

        holder.iv_del.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(listener!=null){
                    listener.onClickDelete(position);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        if(mData==null){
            return 1;
        }else if(mData.size()<maxImgCount){
            return mData.size()+1;
        }else {
            return mData.size();
        }
    }

    @Override
    public int getItemViewType(int position) {
        if (position == 0 && getItemCount()==1 ) {
            return TYPE_ADD;
        } else if(position<getItemCount()-1){
            return TYPE_NORMAL;
        }else {
            if(mData.size()<maxImgCount){
                return TYPE_ADD;
            }else {
                return TYPE_NORMAL;
            }
        }
    }
    public class SelectedPicViewHolder extends RecyclerView.ViewHolder {
        private ImageView iv_img;
        private ImageView iv_del;
        public SelectedPicViewHolder(View itemView) {
            super(itemView);
            iv_img = (ImageView) itemView.findViewById(R.id.iv_img);
            iv_del = (ImageView) itemView.findViewById(R.id.iv_del);
        }
    }
    public static final int TYPE_NORMAL=0X01;
    public static final int TYPE_ADD=0X02;
    public interface  OnItemClickListener{
        void onClickAdd(int position);
        void onClickImage(int position);
        void onClickDelete(int position);
}
}
相關文章
相關標籤/搜索