涉及到的内容 :
1、图片剪切,2、图片保存到SD卡 3、文件读取和保存 4、自定义View 绘制平滑曲线
5、RecycleView 显示 6、Glide框架显示图片 7、大图片显示 8、从相册选择图片
所用设备:
三星 华为 平板
目录结构
目录结构
recycleViewAdapter显示页面简单封装
1.Adapter
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 android.widget.TextView;
import com.bumptech.glide.Glide;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
/**
* Created by Administrator on 2017/4/20 0020.
* 图片浏览
*/
public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.MyHolder> {
private Context context;
private List<ImageModel> list;
/*按钮监听*/
public interface OnItemClickListener {
void onItemClick(ImageModel dataBena);
}
public OnItemClickListener onItemClickListener;
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public ImageAdapter(Context context) {
this.context = context;
list = new ArrayList<>();
}
@Override
public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(context).inflate(R.layout.item_image, parent, false);
MyHolder vh = new MyHolder(view);
return vh;
}
@Override
public void onBindViewHolder(final MyHolder holder, int position) {
final ImageModel model = list.get(position);
Glide.with(context).load(model.getImagepath())
.centerCrop()
.override(300, 300)
.into(holder.image);
holder.tvName.setText(model.getImageName() + "");
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (onItemClickListener != null){
onItemClickListener.onItemClick(model);
}
}
});
}
@Override
public int getItemCount() {
return list.size();
}
public void addAll(Collection collection) {
list.addAll(collection);
notifyDataSetChanged();
}
public void remove() {
list.clear();
}
public class MyHolder extends RecyclerView.ViewHolder {
@BindView(R.id.image)
ImageView image;
@BindView(R.id.tv_name)
TextView tvName;
public MyHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
}
}
2.MainActivity显示布局
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import com.alvasystems.arsdk.facepoint.utils.CheckPermissionsUtil;
import com.alvasystems.arsdk.facepoint.utils.FileUtil;
import com.alvasystems.arsdk.facepoint.zxpaint.PaintActivity;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements ImageReShowAdapter.OnItemClickListener {
private static String SAVEPATH = "/sdcard/DCIM/savealva/save.txt";
@BindView(R.id.recycle)
RecyclerView recycle;
private ImageReShowAdapter adapter;
private List<ImageModel> list = new ArrayList<>();
private List<ImageModel> listsave = new ArrayList<>();
private final String path = "/sdcard/Alarms";
private final String savePath = "/sdcard/DCIM/alva";
private File root = new File(path);
private File saveRoot = new File(savePath);
private String saveName;
private String[] splits;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
CheckPermissionsUtil checkPermissionsUtil = new CheckPermissionsUtil(this);
checkPermissionsUtil.requestAllPermission(this);
initView();
}
@Override
protected void onResume() {
super.onResume();
try {
saveName = FileUtil.readSDCard(SAVEPATH);
splits = saveName.split(",");
Log.e(TAG, "输出信息-->: " + Arrays.toString(splits));
initData(root);
} catch (IOException e) {
e.printStackTrace();
Log.e(TAG, "输出信息-->: 文件读取错误 MainActivity");
initData(root);
}
}
/*初始化View*/
private void initView() {
adapter = new ImageReShowAdapter(this);
recycle.setItemAnimator(new DefaultItemAnimator());
//recycle.setLayoutManager(new LinearLayoutManager(this));
recycle.setLayoutManager(new GridLayoutManager(this, 4));
recycle.setAdapter(adapter);
adapter.setOnItemClickListener(this);
}
/*加载数据*/
private void initData(File root) {
Log.e(TAG, "输出信息-->:root " + root);
list.clear();
adapter.remove();
File[] files = root.listFiles();
if (files != null) {
for (File f : files) {
if (f.isDirectory()) {
initData(f);
} else {
ImageModel model = new ImageModel();
model.setImageName(f.getName());
model.setImagepath(f.getAbsolutePath());
model.setFile(f);
list.add(model);
}
}
/*判断是否有对图像有操作过的 */
for (int i = 0; i < list.size(); i++) {
if (splits != null) {
for (int j = 0; j < (splits.length - 1); j++) {
if (list.get(i).getImageName().equals(splits[j].trim())) {
Log.e(TAG, "输出信息-->: " + splits[j].trim());
list.remove(i);
Log.e(TAG, "输出信息-->: " + list.size());
}
}
}
}
adapter.addAll(list);
adapter.notifyDataSetChanged();
} else {
Log.e(TAG, "输出信息-->: files[] is null 怎么办呢!!");
}
}
/*点击itme 传递给下一个页面*/
@Override
public void onItemClick(ImageModel dataBena) {
String path = dataBena.getImagepath();
String name = dataBena.getImageName();
File file = dataBena.getFile();
Log.e(TAG, "输出信息-->: " + path + "--name--" + name);
if (!path.isEmpty()) {
Bundle bundle = new Bundle();
bundle.putSerializable("model", dataBena);
PaintActivity.PainParams params = new PaintActivity.PainParams();
params.mImagePath = path;
PaintActivity.startActivity(MainActivity.this, params, bundle);
}
}
}