package com.marshalchen.common.uimodule.multi_image_selector; import android.content.Intent; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.view.View; import android.widget.Button; import com.marshalchen.ultimateandroiduicomponent.R; import java.io.File; import java.util.ArrayList; /** * 多图选择 * Created by Nereo on 2015/4/7. */ public class MultiImageSelectorActivity extends FragmentActivity implements MultiImageSelectorFragment.Callback{ /** 最大图片选择次数,int类型,默认9 */ public static final String EXTRA_SELECT_COUNT = "max_select_count"; /** 图片选择模式,默认多选 */ public static final String EXTRA_SELECT_MODE = "select_count_mode"; /** 是否显示相机,默认显示 */ public static final String EXTRA_SHOW_CAMERA = "show_camera"; /** 选择结果,返回为 ArrayList<String> 图片路径集合 */ public static final String EXTRA_RESULT = "select_result"; /** 默认选择集 */ public static final String EXTRA_DEFAULT_SELECTED_LIST = "default_list"; /** 单选 */ public static final int MODE_SINGLE = 0; /** 多选 */ public static final int MODE_MULTI = 1; private ArrayList<String> resultList = new ArrayList<>(); private Button mSubmitButton; private int mDefaultCount; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.multi_image_select_activity_default); Intent intent = getIntent(); mDefaultCount = intent.getIntExtra(EXTRA_SELECT_COUNT, 9); int mode = intent.getIntExtra(EXTRA_SELECT_MODE, MODE_MULTI); boolean isShow = intent.getBooleanExtra(EXTRA_SHOW_CAMERA, true); if(mode == MODE_MULTI && intent.hasExtra(EXTRA_DEFAULT_SELECTED_LIST)) { resultList = intent.getStringArrayListExtra(EXTRA_DEFAULT_SELECTED_LIST); } Bundle bundle = new Bundle(); bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_COUNT, mDefaultCount); bundle.putInt(MultiImageSelectorFragment.EXTRA_SELECT_MODE, mode); bundle.putBoolean(MultiImageSelectorFragment.EXTRA_SHOW_CAMERA, isShow); bundle.putStringArrayList(MultiImageSelectorFragment.EXTRA_DEFAULT_SELECTED_LIST, resultList); getSupportFragmentManager().beginTransaction() .add(R.id.image_grid, Fragment.instantiate(this, MultiImageSelectorFragment.class.getName(), bundle)) .commit(); // 返回按钮 findViewById(R.id.btn_back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { setResult(RESULT_CANCELED); finish(); } }); // 完成按钮 mSubmitButton = (Button) findViewById(R.id.commit); if(resultList == null || resultList.size()<=0){ mSubmitButton.setText("完成"); mSubmitButton.setEnabled(false); }else{ mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); mSubmitButton.setEnabled(true); } mSubmitButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if(resultList != null && resultList.size() >0){ // 返回已选择的图片数据 Intent data = new Intent(); data.putStringArrayListExtra(EXTRA_RESULT, resultList); setResult(RESULT_OK, data); finish(); } } }); } @Override public void onSingleImageSelected(String path) { Intent data = new Intent(); resultList.add(path); data.putStringArrayListExtra(EXTRA_RESULT, resultList); setResult(RESULT_OK, data); finish(); } @Override public void onImageSelected(String path) { if(!resultList.contains(path)) { resultList.add(path); } // 有图片之后,改变按钮状态 if(resultList.size() > 0){ mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); if(!mSubmitButton.isEnabled()){ mSubmitButton.setEnabled(true); } } } @Override public void onImageUnselected(String path) { if(resultList.contains(path)){ resultList.remove(path); mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); }else{ mSubmitButton.setText("完成("+resultList.size()+"/"+mDefaultCount+")"); } // 当为选择图片时候的状态 if(resultList.size() == 0){ mSubmitButton.setText("完成"); mSubmitButton.setEnabled(false); } } @Override public void onCameraShot(File imageFile) { if(imageFile != null) { Intent data = new Intent(); resultList.add(imageFile.getAbsolutePath()); data.putStringArrayListExtra(EXTRA_RESULT, resultList); setResult(RESULT_OK, data); finish(); } } }