Android 上传图片实现图片加减
1.直接上代码。首先是布局文件我是利用Gridview,当然你们可以利用recyclerview
<GridView
android:layout_marginRight="@dimen/dp_margin_14"
android:layout_marginBottom="@dimen/dp_margin_14"
android:id="@+id/gv_view1"
android:layout_marginLeft="@dimen/dp_margin_14"
android:layout_marginTop="@dimen/dp_margin_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
2.然后在MianActivity初始化控件,写适配器
package com.kaitong.cn.projictceshi1;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import com.lcw.library.imagepicker.ImagePicker;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private GridView gridView;
private ArrayList<String> mPicList = new ArrayList<>(); //上传的图片凭证的数据源
private GridViewImagAdapter mGridViewAddImgAdapter;
private ArrayList<String> imagePaths=new ArrayList<>();
private static final int REQUEST_SELECT_IMAGES_CODE = 0x01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
gridView = findViewById(R.id.gridView);
mGridViewAddImgAdapter = new GridViewImagAdapter(MainActivity.this, mPicList);
gridView.setNumColumns(3);
gridView.setAdapter(mGridViewAddImgAdapter);
mGridViewAddImgAdapter.setmOnItemClickListener(new GridViewImagAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (R.id.pic_iv == view.getId()) {
//如果“增加按钮形状的”图片的位置是最后一张,且添加了的图片的数量不超过9张,才能点击
if (mPicList.size() == 3) {
Toast.makeText(MainActivity.this,"最多上传3张照片!",Toast.LENGTH_SHORT).show();
} else if ((position < mPicList.size())){//上传图片点击
Toast.makeText(MainActivity.this,"点击选择过后的图片",Toast.LENGTH_SHORT).show();
} else {
pic();
}
} else if (R.id.img_del == view.getId()) {
mPicList.remove(position);
mGridViewAddImgAdapter.notifyDataSetChanged();
}
}
});
}
//调用相机和相册
private void pic() {
ImagePicker.getInstance()
.setTitle("标题")//设置标题
.showCamera(true)//设置是否显示拍照按钮
.showImage(true)//设置是否展示图片
.showVideo(false)//设置是否展示视频
.setSingleType(true)//设置图片视频不能同时选择
.setMaxCount(3)//设置最大选择图片数目(默认为1,单选)
.setImageLoader(new GlideLoader())//设置自定义图片加载器
.start(MainActivity.this, REQUEST_SELECT_IMAGES_CODE);//REQEST_SELECT_IMAGES_CODE为Intent调用的requestCode
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_SELECT_IMAGES_CODE && resultCode == RESULT_OK) {
imagePaths = data.getStringArrayListExtra(ImagePicker.EXTRA_SELECT_IMAGES);
for (int i = 0 ;i <imagePaths.size(); i++){
mPicList.add(imagePaths.get(i));
}
mGridViewAddImgAdapter.notifyDataSetChanged();
}
}
}
3.适配器
package com.kaitong.cn.projictceshi1;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.Toast;
import com.bumptech.glide.Glide;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.List;
public class GridViewImagAdapter extends BaseAdapter {
private Context mContext;
private List<String> mList;
private LayoutInflater inflater;
private OnItemClickListener mOnItemClickListener;
public void setmOnItemClickListener(GridViewImagAdapter.OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
public GridViewImagAdapter(Context mContext, List<String> mList) {
this.mContext = mContext;
this.mList = mList;
inflater = LayoutInflater.from(mContext);
notifyDataSetChanged();
}
@Override
public int getCount() {
//return mList.size() + 1;//因为最后多了一个添加图片的ImageView
int count = mList == null ? 1 : mList.size() + 1;
if (count > 3) {
return mList.size();
} else {
return count;
}
}
@Override
public Object getItem(int position) {
return mList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
convertView = inflater.inflate(R.layout.load_item_pic, parent, false);
final ImageView iv = (ImageView) convertView.findViewById(R.id.pic_iv);
final ImageView ivdel = (ImageView) convertView.findViewById(R.id.img_del);
if (mOnItemClickListener != null) {
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onItemClick(iv, position);
}
});
}
if (mOnItemClickListener != null) {
ivdel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemClickListener.onItemClick(ivdel, position);
}
});
}
if (position < mList.size()) {
//代表+号之前的需要正常显示图片
String picUrl = mList.get(position); //图片路径
Toast.makeText(mContext,"picUrl:"+picUrl,Toast.LENGTH_SHORT).show();
//GlideUtil.loaderImg(mContext, iv, picUrl);
//Glide.with(mContext).load(picUrl).into(iv);
/*Bitmap bm= BitmapFactory.decodeResource(mContext.getResources(),picUrl);
Bitmap bitmap = RoundImageView.getCroppedBitmap(bm, 400);
iv.setImageBitmap(bitmap);*/
iv.setImageBitmap(getLoacalBitmap(picUrl));
ivdel.setVisibility(View.VISIBLE);
} else {
ivdel.setVisibility(View.GONE);
iv.setImageResource(R.drawable.zhanwei);//最后一个显示加号图片
}
return convertView;
}
public static Bitmap getLoacalBitmap(String url) {
try {
FileInputStream fis = new FileInputStream(url);
return BitmapFactory.decodeStream(fis);
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
}
}
4.适配器里面的Itm布局(布局自己优化)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:descendantFocusability="blocksDescendants">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
>
<ImageView
android:src="@drawable/zhanwei"
android:layout_marginTop="21dp"
android:id="@+id/pic_iv"
android:layout_width="105dp"
android:layout_height="105dp"
android:scaleType="centerCrop"
/>
<ImageView
android:layout_marginTop="14dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:id="@+id/img_del"
android:layout_width="20dp"
android:layout_height="20dp"
android:src="@drawable/zhanwei_chahao"
android:clickable="false"
android:focusable="false"
/>
</RelativeLayout>
</RelativeLayout>