Add multiple pictures in the post content interface. Can realize the function of loading and deleting multiple pictures
Click the add picture function to put it in the attached zip package, unzip the package and put it into the project, and you can make it into a library.
Add custom layout:
<com.xxx.MyGridView android:id="@+id/gv_imgs" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:horizontalSpacing="5dp" android:numColumns="4" android:verticalSpacing="5dp" />
Customize myGridview.java:
public class MyGridView extends GridView { public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); } public MyGridView(Context context) { super(context); } public MyGridView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec( Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
Publish interface code function:
MyGridView gv_imgs; private ImageAdapter mAdapter; private List<String> mList = new ArrayList<>(); mAdapter = new ImageAdapter(mList, this); mAdapter.setCallback (new IDeletePicCallback () { @Override public void callBack(int position) { mList.remove(position); } }); gv_imgs.setAdapter(mAdapter);
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (resultCode != RESULT_OK) { return; } if (requestCode == REQUEST_IMAGE) { List<String> list = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT); if (list != null && list.size() >= 0) { mList.addAll(list); mAdapter.notifyDataSetChanged(); } } }
Adapter ImageAdapter.java:
public class ImageAdapter extends BaseAdapter { private List<String> list; private Context context; private IDeletePicCallback callback; public void setCallback(IDeletePicCallback callback) { this.callback = callback; } public ImageAdapter(List<String> list, Context context) { this.list = list; this.context = context; } @Override public int getCount() { if (list == null || list.size() <= 0) { return 1; } else { if (list.size() >= 9) { return 9; } else { return list.size() + 1; } } } @Override public Object getItem(int position) { return null; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(context).inflate(R.layout.item_pic_add, parent, false); } ImageView iv_del = ViewHolder.get(convertView, R.id.iv_item_del); LinearLayout iv_add = ViewHolder.get(convertView, R.id.iv_item_add); final ImageView iv_pic = ViewHolder.get(convertView, R.id.iv_item_pic); if (list.size() >= 9 && position == 8) { iv_add.setVisibility(View.GONE); iv_del.setVisibility(View.VISIBLE); iv_pic.setVisibility(View.VISIBLE); Glide.with(context).load(list.get(position)).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(iv_pic); } else { if (position == list.size()) { iv_add.setVisibility(View.VISIBLE); iv_del.setVisibility(View.GONE); iv_pic.setVisibility(View.GONE); } else { iv_add.setVisibility(View.GONE); iv_del.setVisibility(View.VISIBLE); iv_pic.setVisibility(View.VISIBLE); Glide.with(context).load(list.get(position)).diskCacheStrategy(DiskCacheStrategy.ALL).centerCrop().into(iv_pic); } } iv_add.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(context,"5555",Toast.LENGTH_SHORT).show(); Intent intent = new Intent(context, MultiImageSelectorActivity.class); intent.putExtra(MultiImageSelectorActivity.EXTRA_SELECT_COUNT, 9 - list.size()); ((Activity) context).startActivityForResult(intent, REQUEST_IMAGE); } }); final int pos = position; iv_del.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (callback != null) { callback.callBack(pos); } notifyDataSetChanged(); } }); iv_pic.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(context, ImagePagerActivity.class); intent.putExtra(ImagePagerActivity.EXTRA_IMAGE_INDEX, pos); // ArrayList<String> list = new ArrayList<String>(); // list.add("file://" + img.path); intent.putStringArrayListExtra(ImagePagerActivity.EXTRA_IMAGE_URLS, (ArrayList<String>) list); context.startActivity(intent); } }); return convertView; } }
Adapter layout file item_pic_add.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#fff" android:gravity="center" android:orientation="vertical"> <ImageView android:id="@+id/iv_item_pic" android:layout_marginTop="15dp" android:layout_width="75dp" android:layout_height="75dp" android:background="#eeede9" android:scaleType="centerCrop" android:layout_centerVertical="true" android:layout_alignParentLeft="true" android:layout_alignParentStart="true" /> <RelativeLayout android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="5dp"> <ImageView android:id="@+id/iv_item_del" android:layout_width="20dp" android:layout_height="20dp" android:layout_alignParentRight="true" android:src="@drawable/img_delete" /> </RelativeLayout> <LinearLayout android:id="@+id/iv_item_add" android:layout_marginTop="10dp" android:layout_width="75dp" android:layout_height="75dp" android:orientation="vertical" android:gravity="center" android:scaleType="centerCrop" android:background="#f2f2f2" android:visibility="gone"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:scaleType="fitXY" android:src="@drawable/img_photo_add" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Add picture" android:textSize="12sp" android:layout_marginTop="5dp" android:textColor="#c6c6c6"/> </LinearLayout> </RelativeLayout>