圖一: 圖二: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); } }