/** * **************************************************************************** * Copyright 2011-2013 Sergey Tarasevich * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ***************************************************************************** */ package net.coding.program; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Bitmap; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.app.ActionBar; import android.support.v7.app.AlertDialog; import android.view.Menu; import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.assist.ImageScaleType; import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import net.coding.program.common.ui.BackActivity; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.EActivity; import org.androidannotations.annotations.Extra; import org.androidannotations.annotations.OptionsItem; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; @EActivity(R.layout.activity_image_pager) public class ImagePagerActivity extends BackActivity { private final String SAVE_INSTANCE_INDEX = "SAVE_INSTANCE_INDEX"; DisplayImageOptions options; @ViewById ViewPager pager; @Extra int mPagerPosition; @Extra ArrayList<String> mArrayUri; @Extra boolean isPrivate; @Extra String mSingleUri; @Extra boolean needEdit; ImagePager adapter; ArrayList<String> mDelUrls = new ArrayList<>(); TextView mMenuImagePos; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (savedInstanceState != null) { mPagerPosition = savedInstanceState.getInt(SAVE_INSTANCE_INDEX, mPagerPosition); } } @AfterViews void init() { if (needEdit) { ActionBar supportActionBar = getSupportActionBar(); supportActionBar.setIcon(android.R.color.transparent); View v = getLayoutInflater().inflate(R.layout.image_pager_action_custom, null); mMenuImagePos = (TextView) v.findViewById(R.id.imagePos); supportActionBar.setCustomView(v); supportActionBar.setDisplayShowCustomEnabled(true); pager.setBackgroundColor(getResources().getColor(R.color.stand_bg)); pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { setPosDisplay(position); } @Override public void onPageScrollStateChanged(int state) { } }); setPosDisplay(0); } else { getSupportActionBar().hide(); pager.setBackgroundColor(getResources().getColor(R.color.black)); } if (mSingleUri != null) { mArrayUri = new ArrayList<>(); mArrayUri.add(mSingleUri); mPagerPosition = 0; } options = new DisplayImageOptions.Builder() .showImageForEmptyUri(R.drawable.ic_default_image) .showImageOnFail(R.drawable.ic_default_image) .resetViewBeforeLoading(true) .cacheOnDisk(true) .imageScaleType(ImageScaleType.EXACTLY) .bitmapConfig(Bitmap.Config.RGB_565) .considerExifParams(true) .displayer(new FadeInBitmapDisplayer(300)) .build(); if (!isPrivate) { initPager(); } } private void setPosDisplay(int position) { String pos = String.format("%d/%d", position + 1, mArrayUri.size()); mMenuImagePos.setText(pos); } private void initPager() { adapter = new ImagePager(getSupportFragmentManager()); pager.setAdapter(adapter); pager.setCurrentItem(mPagerPosition); } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putInt(SAVE_INSTANCE_INDEX, pager.getCurrentItem()); } @Override protected void onRestoreInstanceState(Bundle savedInstanceState) { super.onRestoreInstanceState(savedInstanceState); mPagerPosition = savedInstanceState.getInt(SAVE_INSTANCE_INDEX, mPagerPosition); } @Override public boolean onCreateOptionsMenu(Menu menu) { if (needEdit) { MenuInflater menuInflater = getMenuInflater(); menuInflater.inflate(R.menu.photo_pager, menu); } return super.onCreateOptionsMenu(menu); } @Override public void onBackPressed() { if (mDelUrls.isEmpty()) { setResult(RESULT_CANCELED); } else { Intent intent = new Intent(); intent.putExtra("mDelUrls", mDelUrls); setResult(RESULT_OK, intent); } finish(); } @OptionsItem protected final void action_del_maopao() { final int selectPos = pager.getCurrentItem(); AlertDialog dialog = new AlertDialog.Builder(this) .setTitle("图片") .setMessage("确定删除?") .setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { String s = mArrayUri.remove(selectPos); mDelUrls.add(s); if (mArrayUri.isEmpty()) { onBackPressed(); } else { setPosDisplay(pager.getCurrentItem()); adapter.notifyDataSetChanged(); } } }) .setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { } }) .show(); } class ImagePager extends FragmentStatePagerAdapter { public ImagePager(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int i) { return ImagePagerFragment_.builder() .uri(mArrayUri.get(i)) .customMenu(false) .build(); } @Override public Object instantiateItem(ViewGroup container, int position) { ImagePagerFragment fragment = (ImagePagerFragment) super.instantiateItem(container, position); fragment.setData(mArrayUri.get(position)); return fragment; } @Override public int getItemPosition(Object object) { return POSITION_NONE; } @Override public int getCount() { return mArrayUri.size(); } } }