Newer
Older
dxcgt / app / src / main / java / com / smartdot / cgt / view / ImagesLayout.java
wangxitong on 6 Apr 2021 6 KB first commit
package com.smartdot.cgt.view;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.LinearLayout;

import com.smartdot.cgt.R;
import com.smartdot.cgt.util.ApplicationMain;

public class ImagesLayout extends LinearLayout {

    private static final String FILEDIRPATH = "tempimageview";

    public ImagesLayout(Context context) {
        super(context);
    }

    public ImagesLayout(Context context, AttributeSet attr) {
        super(context, attr);
    }

    private ArrayList < Bitmap > selectedImages = new ArrayList < Bitmap >();

    private ImageView image1;

    private ImageView image2;

    private ImageView image3;

    private ImageButton closeBtn1;

    private ImageButton closeBtn2;

    private ImageButton closeBtn3;

    private OnCountChange onCountChange;

    private OnPreviewImage onPreviewImage;

    private boolean hadSaved = false;

    private ArrayList < String > pathList;

    public void setHadSaved(boolean hadSaved) {
        if (hadSaved && !this.hadSaved) {
            this.hadSaved = hadSaved;

            pathList = new ArrayList < String >();
            int i = 0;
            String filePath = ApplicationMain.getInstance().getConfigPath(FILEDIRPATH);
            File file = new File(filePath);
            if (!file.exists()) {
                file.mkdirs();
            }
            for (Bitmap bitmap : selectedImages) {
                File imageFile = new File(filePath, Integer.toString(i) + ".jpg");
                try {
                    imageFile.createNewFile();
                    OutputStream fileOutput = new FileOutputStream(imageFile);
                    bitmap.compress(CompressFormat.JPEG, 80, fileOutput);
                    fileOutput.flush();
                    fileOutput.close();
                    pathList.add(imageFile.getAbsolutePath());
                } catch (IOException e) {
                    e.printStackTrace();
                }
                i++;
            }
        }
    }

    public void setOnPreviewImage(OnPreviewImage onPreviewImage) {
        this.onPreviewImage = onPreviewImage;
    }

    public void setOnCountChange(OnCountChange onCountChange) {
        this.onCountChange = onCountChange;
    }

    public Bitmap[] getSelectedImages() {
        Bitmap[] result = new Bitmap[selectedImages.size()];
        return selectedImages.toArray(result);
    }

    public ArrayList < String > getSelectedImagesPath() {
        if (!hadSaved) {
            setHadSaved(true);
        }
        return pathList;
    }

    public int getSelectedImageCount() {
        return selectedImages.size();
    }

    private OnClickListener closeListener = new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if (arg0 == closeBtn1) {
                removeSelectedImage(0);
            } else if (arg0 == closeBtn2) {
                removeSelectedImage(1);
            } else if (arg0 == closeBtn3) {
                removeSelectedImage(2);
            }
        }
    };

    private OnClickListener previewListener = new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if (arg0 == image1) {
                previewImage(0);
            } else if (arg0 == image2) {
                previewImage(1);
            } else if (arg0 == image3) {
                previewImage(2);
            }
        }
    };

    /**
     * @param i
     * @return 是否可以继续添加图片
     */
    public boolean removeSelectedImage(int i) {
        if (this.selectedImages.size() > i) {
            this.selectedImages.remove(i);
            redrawSelectedImages();
        }
        if (onCountChange != null)
            onCountChange.getNowCount(this.selectedImages.size());
        return this.selectedImages.size() < 3;
    }

    protected void previewImage(int i) {
        if (selectedImages.size() > i) {
            if (onPreviewImage != null) {
                onPreviewImage.previewImage(i);
            }
        }
    }

    /**
     * @param selectedImage
     * @return 是否可以继续添加图片
     */
    public boolean addSelectedImage(Bitmap selectedImage) {
        this.selectedImages.add(selectedImage);
        redrawSelectedImages();
        if (onCountChange != null)
            onCountChange.getNowCount(this.selectedImages.size());
        if (this.selectedImages.size() >= 3) {
            return false;
        } else {
            return true;
        }
    }

    private void redrawSelectedImages() {
        try {
            image1.setImageBitmap(this.selectedImages.size() > 0 ? this.selectedImages.get(0) : null);
            image2.setImageBitmap(this.selectedImages.size() > 1 ? this.selectedImages.get(1) : null);
            image3.setImageBitmap(this.selectedImages.size() > 2 ? this.selectedImages.get(2) : null);
            if (this.selectedImages.size() > 0)
                this.requestFocus(300);
        } catch (Exception e) {
            Log.w("XmlHelper", e.toString());
        }
        hadSaved = false;
    }

    @Override
    protected void onFinishInflate() {
        super.onFinishInflate();
        if (image1 == null) {
            image1 = (ImageView) this.findViewById(R.id.image1);
            image2 = (ImageView) this.findViewById(R.id.image2);
            image3 = (ImageView) this.findViewById(R.id.image3);
            image1.setOnClickListener(previewListener);
            image2.setOnClickListener(previewListener);
            image3.setOnClickListener(previewListener);
            closeBtn1 = (ImageButton) this.findViewById(R.id.closeBtn1);
            closeBtn2 = (ImageButton) this.findViewById(R.id.closeBtn2);
            closeBtn3 = (ImageButton) this.findViewById(R.id.closeBtn3);
            closeBtn1.setOnClickListener(closeListener);
            closeBtn2.setOnClickListener(closeListener);
            closeBtn3.setOnClickListener(closeListener);
        }
    }

    public abstract class OnCountChange {
        public abstract void getNowCount(int nowCount);
    }

    public abstract class OnPreviewImage {
        public abstract void previewImage(int viewIndex);
    }
}