package cn.alphabets.light.ui; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.CheckBox; import android.widget.GridView; import org.json.JSONObject; import java.io.File; import java.util.ArrayList; import java.util.List; import cn.alphabets.light.R; import cn.alphabets.light.application.ABActivity; import cn.alphabets.light.application.ABSwipeBackActivity; import cn.alphabets.light.model.GsonParser; import cn.alphabets.light.model.ModelFile; import cn.alphabets.light.network.Parameter; import cn.alphabets.light.setting.Default; import cn.alphabets.light.util.FileUtil; public class ImageActivity extends ABSwipeBackActivity { public static final String INTENT_IMAGES = "images"; public static final String VALUE = "value"; public static final String VALUE_TITLE = "value_title"; public static final String TITLE = "title"; public static final String READONLY = "readonly"; public static final String SCALED_WIDTH = "scaled_width"; public static final String THEME = "theme"; public static final int PICK_PHOTO = 1; private int mScaledWidth; /** * 图像一览 */ private ImageAdapter mAdapter; private GridView mGridView; private Menu mMenu; @Override protected void onCreate(Bundle savedInstanceState) { // 设定Theme,需要在setContentView之前调用 Bundle extras = getIntent().getExtras(); if (extras != null) { int resourceId = extras.getInt(THEME, 0); if (resourceId != 0) { setTheme(resourceId); } } super.onCreate(savedInstanceState); Helper.setNoIconBackActionBar(this, "ImageList"); setContentView(R.layout.activity_image); List<ImageAdapter.ImageItem> images = new ArrayList<>(); boolean isReadOnly = false; if (extras != null) { // 设置自定义标题 String title = extras.getString(TITLE); if (title != null) { setTitle(title); } // 获取传入的图片一览 String[] files = extras.getStringArray(INTENT_IMAGES); if (files != null) { for (String fid : files) { images.add(new ImageAdapter.ImageItem(fid)); } } // 获取图片缩放宽度大小 mScaledWidth = extras.getInt(SCALED_WIDTH); isReadOnly = extras.getBoolean(READONLY); } mAdapter = new ImageAdapter(getApplicationContext(), R.layout.activity_image_item); mAdapter.addAll(images); // 点击预览 mGridView = (GridView) findViewById(R.id.gridView); mGridView.setAdapter(mAdapter); mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if (mMenu.findItem(android.R.id.empty) == null || !mMenu.findItem(android.R.id.empty).isVisible()) { ArrayList<String> photoUriList = new ArrayList<>(); for (int i = 0; i < mAdapter.getCount(); i++) { ImageAdapter.ImageItem item = mAdapter.getItem(i); photoUriList.add(item.imageUrl); } Intent intent = new Intent(ImageActivity.this, PreviewActivity.class); intent.putExtra(PreviewActivity.INDEX, position); intent.putStringArrayListExtra(PreviewActivity.IMAGES, photoUriList); startActivity(intent); } else { CheckBox cb = (CheckBox) view.findViewById(R.id.check); if (cb.isChecked()) { cb.setChecked(false); } else { cb.setChecked(true); } } } }); if (!isReadOnly) { mGridView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) { if (mMenu.findItem(android.R.id.edit).isVisible()) { for (int j = 0; j < mAdapter.getCount(); j++) { View v = mGridView.getChildAt(j); CheckBox cb = (CheckBox) v.findViewById(R.id.check); cb.setVisibility(View.VISIBLE); } MenuItem addItem = mMenu.findItem(android.R.id.edit); addItem.setVisible(false); MenuItem removeItem = mMenu.findItem(android.R.id.empty); if (removeItem == null) { removeItem = mMenu.add(Menu.NONE, android.R.id.empty, 1, getResources().getString(R.string.remove)); removeItem.setTitle(getResources().getString(R.string.remove)); removeItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } else { removeItem.setVisible(true); } MenuItem cancelItem = mMenu.findItem(android.R.id.closeButton); if (cancelItem == null) { cancelItem = mMenu.add(Menu.NONE, android.R.id.closeButton, 1, getResources().getString(R.string.cancel)); cancelItem.setTitle(getResources().getString(R.string.cancel)); cancelItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } else { cancelItem.setVisible(true); } } return true; } }); } else { mGridView.setOnLongClickListener(null); } } @Override public boolean onCreateOptionsMenu(Menu menu) { boolean isReadOnly = getIntent().getExtras().getBoolean(READONLY); if (!isReadOnly) { MenuItem item = menu.add(Menu.NONE, android.R.id.edit, 1, R.string.save); item.setIcon(R.drawable.tool_plus_white); item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); } this.mMenu = menu; return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); // 返回 if (id == android.R.id.home) { ArrayList<String> images = new ArrayList<>(); ArrayList<String> titles = new ArrayList<>(); for (int i = 0; i < mAdapter.getCount(); i++) { images.add(mAdapter.getItem(i).imageUrl); titles.add(mAdapter.getItem(i).imageName); } Intent data = new Intent(); data.putStringArrayListExtra(VALUE, images); data.putStringArrayListExtra(VALUE_TITLE, titles); setResult(RESULT_OK, data); onBackPressed(); return true; } // 添加 if (id == android.R.id.edit) { Dialog.takePhoto(this, PICK_PHOTO); return true; } // 删除 if (id == android.R.id.empty) { List<ImageAdapter.ImageItem> removeItems = new ArrayList<>(); for (int j = 0, count = mAdapter.getCount(); j < count; j++) { View v = mGridView.getChildAt(j); CheckBox checkBox = (CheckBox) v.findViewById(R.id.check); if (checkBox.isChecked()) { removeItems.add(mAdapter.getItem(j)); } checkBox.setVisibility(View.GONE); } for (ImageAdapter.ImageItem imageObj : removeItems) { mAdapter.remove(imageObj); } mAdapter.notifyDataSetChanged(); MenuItem addItem = mMenu.findItem(android.R.id.edit); addItem.setVisible(true); MenuItem cancelItem = mMenu.findItem(android.R.id.closeButton); cancelItem.setVisible(false); item.setVisible(false); } // 取消删除模式 if (id == android.R.id.closeButton) { for (int j = 0, count = mAdapter.getCount(); j < count; j++) { View v = mGridView.getChildAt(j); CheckBox cb = (CheckBox) v.findViewById(R.id.check); if (cb.isChecked()) { cb.setChecked(false); } cb.setVisibility(View.GONE); } MenuItem addItem = mMenu.findItem(android.R.id.edit); addItem.setVisible(true); MenuItem removeItem = mMenu.findItem(android.R.id.empty); removeItem.setVisible(false); item.setVisible(false); } return super.onOptionsItemSelected(item); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (resultCode == Activity.RESULT_OK) { String photo = Dialog.parsePhoto(requestCode, resultCode, data); if (photo == null) { Dialog.toast(getResources().getString(R.string.fetch_photo_error)); } else { boolean isFromCamera = (data == null); int scaledWidth = mScaledWidth > 0 ? mScaledWidth : Default.ScaledWidth; final String fileName = new File(photo).getName(); final String bitmap = FileUtil.scaledBitmap(photo, scaledWidth, isFromCamera); UPLOAD(Default.UrlSendFile, new Parameter().put(bitmap, new File(bitmap)), new ABActivity.Success() { @Override public void onResponse(JSONObject response) { GsonParser<ModelFile> files = GsonParser.fromJson(response, ModelFile.getListTypeToken()); String url = files.getData().getItems().get(0).get_id(); ImageAdapter.ImageItem item = new ImageAdapter.ImageItem(fileName, url, FileUtil.loadBitmap(bitmap)); mAdapter.add(item); mAdapter.notifyDataSetChanged(); } }); } } } }