package com.gzsll.hupu.ui.imagepreview; import android.app.Fragment; import android.app.FragmentManager; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.support.v13.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.support.v7.widget.Toolbar; import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import com.gzsll.hupu.R; import com.gzsll.hupu.ui.BaseSwipeBackActivity; import com.gzsll.hupu.util.StatusBarUtil; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import javax.inject.Inject; import butterknife.BindView; import butterknife.ButterKnife; /** * Created by sll on 2016/3/10. */ public class ImagePreviewActivity extends BaseSwipeBackActivity implements ViewPager.OnPageChangeListener, ImagePreviewContract.View { public static void startActivity(Context mContext, String extraPic, ArrayList<String> extraPics) { Intent intent = new Intent(mContext, ImagePreviewActivity.class); intent.putExtra("extraPic", extraPic); intent.putExtra("extraPics", extraPics); mContext.startActivity(intent); } @Inject ImagePreviewPresenter mPresenter; @BindView(R.id.viewPager) ViewPager viewPager; @BindView(R.id.toolbar) Toolbar toolbar; private HashMap<Integer, ImageFragment> fragmentMap = new HashMap<>(); private ImageViewAdapter mImageViewAdapter; private int mCurrentItem = 0; private List<String> extraPics; private String extraPic; @Override public int initContentView() { return R.layout.activity_preview; } @Override public void initInjector() { DaggerImagePreviewComponent.builder() .applicationComponent(getApplicationComponent()) .activityModule(getActivityModule()) .build() .inject(this); } @Override public void initUiAndListener() { ButterKnife.bind(this); mPresenter.attachView(this); toolbar.setPadding(0, getStatusBarHeight(), 0, 0); toolbar.setBackgroundColor(Color.TRANSPARENT); initToolBar(toolbar); extraPics = getIntent().getStringArrayListExtra("extraPics"); extraPic = getIntent().getStringExtra("extraPic"); initViewPager(); initCurrentItem(); } private void initViewPager() { mImageViewAdapter = new ImageViewAdapter(getFragmentManager()); viewPager.setAdapter(mImageViewAdapter); viewPager.setOnPageChangeListener(this); } void initCurrentItem() { mCurrentItem = extraPics.indexOf(extraPic); if (mCurrentItem < 0) { mCurrentItem = 0; } viewPager.setCurrentItem(mCurrentItem); getSupportActionBar().setTitle((mCurrentItem + 1) + "/" + extraPics.size()); } @Override protected boolean isApplyStatusBarTranslucency() { return true; } @Override protected boolean isApplyStatusBarColor() { return false; } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mCurrentItem = position; getSupportActionBar().setTitle((position + 1) + "/" + mImageViewAdapter.getCount()); } @Override public void onPageScrollStateChanged(int state) { } public class ImageViewAdapter extends FragmentStatePagerAdapter { public ImageViewAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { ImageFragment fragment = fragmentMap.get(position); if (fragment == null) { fragment = ImageFragment.newInstance(extraPics.get(position)); fragmentMap.put(position, fragment); } return fragment; } @Override public int getCount() { return extraPics.size(); } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { super.setPrimaryItem(container, position, object); if (object instanceof Fragment) { fragmentMap.put(position, (ImageFragment) object); } } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.menu_picture, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { int id = item.getItemId(); if (id == R.id.savePicture) { mPresenter.saveImage(extraPics.get(viewPager.getCurrentItem())); } else if (id == R.id.share) { } else if (id == R.id.copy) { mPresenter.copyImagePath(extraPics.get(viewPager.getCurrentItem())); } else if (id == android.R.id.home) { finish(); } else if (id == R.id.downloadAgain) { ImageFragment fragment = ((ImageFragment) mImageViewAdapter.getItem(viewPager.getCurrentItem())); if (fragment != null) { fragment.initData(); } } return true; } @Override public void setStatusBarColor(boolean on) { if (on) { StatusBarUtil.setColor(this, Color.TRANSPARENT, 0); } } }