package com.florianmski.tracktoid.ui.fragments.base.pager; import android.graphics.Bitmap; import android.graphics.Color; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.os.Bundle; import android.util.SparseArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.florianmski.tracktoid.utils.ColorFilterHelper; import com.florianmski.tracktoid.R; import com.florianmski.tracktoid.utils.Utils; import com.florianmski.tracktoid.ui.widgets.CrossFadeDrawable; import com.florianmski.tracktoid.ui.widgets.TraktImageView; import com.squareup.picasso.Picasso; import com.squareup.picasso.Target; public abstract class PagerHeaderImageFragment extends PagerHeaderFragment { protected TraktImageView tivScreen; private final ColorFilterHelper cfh = new ColorFilterHelper(); protected SparseArray<String> imagesArray = new SparseArray<String>(); protected CrossFadeDrawable cfd = new CrossFadeDrawable(); @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_pager_header_image, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); tivScreen = (TraktImageView)view.findViewById(R.id.imageViewScreen); } @Override public void onHeaderTranslate(int key, float translationY) { float percentTranslated = 1 - (flHeader.getTop() - translationY) / (flHeader.getHeight() - getActionBar().getHeight() - tabs.getHeight()); tivScreen.setTranslationY(-translationY * 0.5f); cfh.update(tivScreen, percentTranslated); } public void changeHeaderImage(String url) { Picasso.with(getActivity()).load(url).placeholder(new ColorDrawable(Utils.getColorFromAttribute(getActivity(), R.attr.colorPrimary))).into(tivScreen); // Picasso.with(getActivity()).load(i.getUrl()).into(new Target() // { // @Override // public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) // { // Drawable initialDrawable = tivScreen.getDrawable(); // Drawable[] drawables = new Drawable[] { // initialDrawable == null ? new ColorDrawable() : initialDrawable, // new BitmapDrawable(getResources(), bitmap) // }; // TransitionDrawable d = new TransitionDrawable(drawables); // tivScreen.setImageDrawable(d); // d.startTransition(500); // } // // @Override // public void onBitmapFailed(Drawable errorDrawable) // { // // } // // @Override // public void onPrepareLoad(Drawable placeHolderDrawable) // { // // } // }); } public void setImage(int position, String url) { imagesArray.put(position, url); } @Override public void onPageSelected(int position) { super.onPageSelected(position); picassoLoad(position-1); picassoLoad(position); picassoLoad(position+1); } private void picassoLoad(final int position) { if(position < 0 || position >= imagesArray.size()) return; Picasso.with(getActivity()).load(imagesArray.get(position)).into(new Target() { @Override public void onBitmapLoaded(Bitmap bitmap, Picasso.LoadedFrom from) { if(position == PagerHeaderImageFragment.this.position) // PagerHeaderImageFragment.this.cfd.setCurrent(new BitmapDrawable(getResources(), bitmap)); PagerHeaderImageFragment.this.cfd.setCurrent(new ColorDrawable(Color.GREEN)); else if(position < PagerHeaderImageFragment.this.position) // PagerHeaderImageFragment.this.cfd.setBefore(new BitmapDrawable(getResources(), bitmap)); PagerHeaderImageFragment.this.cfd.setBefore(new ColorDrawable(Color.BLUE)); else // PagerHeaderImageFragment.this.cfd.setAfter(new BitmapDrawable(getResources(), bitmap)); PagerHeaderImageFragment.this.cfd.setAfter(new ColorDrawable(Color.RED)); } @Override public void onBitmapFailed(Drawable errorDrawable) { } @Override public void onPrepareLoad(Drawable placeHolderDrawable) { } }); } @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { super.onPageScrolled(position, positionOffset, positionOffsetPixels); cfd.setPositionOffset(this.position == position ? positionOffset : -positionOffset); tivScreen.setImageDrawable(cfd); } }