package uk.co.imallan.tuchongdaily.ui.activity; import android.annotation.SuppressLint; import android.app.Activity; import android.app.SharedElementCallback; import android.content.Intent; import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.app.ActivityOptionsCompat; import android.support.v4.view.ViewPager; import android.view.View; import java.util.ArrayList; import java.util.List; import java.util.Map; import uk.co.imallan.tuchongdaily.R; import uk.co.imallan.tuchongdaily.ui.adapter.PostImagePagerAdapter; import uk.co.imallan.tuchongdaily.ui.fragment.ImageFragment; /** * Created by allan on 15/3/1. */ public class ImagePagerActivity extends AbstractActivity implements ViewPager.OnPageChangeListener { private static final String EXTRA_IMAGE_IDS = "EXTRA_IMAGE_IDS"; public static final int CODE_VIEW_IMAGE_PAGER = 1; public static String EXTRA_IMAGE_POSITION = "EXTRA_IMAGE_POSITION"; private ArrayList<String> mIds; private int mPosition; private ViewPager mPager; private PostImagePagerAdapter mAdapter; public static void startActivity(Activity activity, ArrayList<String> serverIds, int position, View view) { Intent intent = new Intent(activity, ImagePagerActivity.class); intent.putExtra(EXTRA_IMAGE_IDS, serverIds); intent.putExtra(EXTRA_IMAGE_POSITION, position); ActivityOptionsCompat options; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { options = ActivityOptionsCompat.makeSceneTransitionAnimation(activity, view, activity.getString(R.string.share_hero)); } else { options = ActivityOptionsCompat.makeScaleUpAnimation(view, 0, 0, view.getWidth(), view.getHeight()); } ActivityCompat.startActivityForResult(activity, intent, CODE_VIEW_IMAGE_PAGER, options.toBundle()); } @Override boolean prepareServiceReceiver() { return false; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_image_pager); mIds = getIntent().getStringArrayListExtra(EXTRA_IMAGE_IDS); mPosition = getIntent().getIntExtra(EXTRA_IMAGE_POSITION, 0); mPager = (ViewPager) findViewById(R.id.pager_images); mAdapter = new PostImagePagerAdapter(getSupportFragmentManager(), mIds); mPager.setAdapter(mAdapter); mPager.setCurrentItem(mPosition); mPager.setOnPageChangeListener(this); initTransitions(); } private void initTransitions() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { postponeEnterTransition(); setEnterSharedElementCallback(new SharedElementCallback() { @SuppressLint("NewApi") @Override public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { super.onMapSharedElements(names, sharedElements); if (mAdapter.getRegisteredFragment(mPosition) != null) { names.clear(); sharedElements.clear(); View view = ((ImageFragment) mAdapter.getRegisteredFragment(mPosition)).mImage; names.add(view.getTransitionName()); sharedElements.put(view.getTransitionName(), view); } } }); } // mPager.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { // @SuppressLint("NewApi") // public boolean onPreDraw() { // mPager.getViewTreeObserver().removeOnPreDrawListener(this); // startPostponedEnterTransition(); // return true; // } // }); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { mPosition = position; } @Override public void onPageScrollStateChanged(int state) { } @Override public void onBackPressed() { super.onBackPressed(); } @Override public void finishAfterTransition() { Intent data = new Intent(); data.putExtra(EXTRA_IMAGE_POSITION, mPosition); setResult(Activity.RESULT_OK, data); super.finishAfterTransition(); } }