package at.favre.app.dalitest.fragment; import android.databinding.DataBindingUtil; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.view.PagerAdapter; import android.support.v4.view.ViewPager; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AbsListView; import android.widget.ArrayAdapter; import android.widget.FrameLayout; import android.widget.ImageView; import android.widget.ListView; import com.squareup.picasso.Picasso; import java.util.ArrayList; import java.util.List; import at.favre.app.dalitest.R; import at.favre.app.dalitest.databinding.FragmentLiveblurBinding; import at.favre.lib.dali.Dali; import at.favre.lib.dali.builder.live.LiveBlurWorker; import at.favre.lib.dali.view.ObservableScrollView; import at.favre.lib.dali.view.Observers; /** * Simple example on how the live blur can be implemented * <p> * This is a view pager with some different views (images, scrollview, list view) * to show how a live blur can be implemented in these situations */ public class LiveBlurFragment extends Fragment { private FragmentLiveblurBinding binding; private LiveBlurWorker blurWorker; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { binding = DataBindingUtil.inflate(inflater, R.layout.fragment_liveblur, container, false); binding.pager.setAdapter(new ScreenSlidePagerAdapter()); blurWorker = Dali.create(getActivity()).liveBlur(binding.blurTemplateView, binding.topBlurView, binding.bottomBlurView).downScale(8).assemble(true); binding.pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { blurWorker.updateBlurView(); } @Override public void onPageSelected(int position) { } @Override public void onPageScrollStateChanged(int state) { } }); return binding.getRoot(); } private class ScreenSlidePagerAdapter extends PagerAdapter { private FrameLayout scrollViewLayout; private FrameLayout listViewLayout; public View getView(int position, ViewPager pager) { switch (position) { case 0: return createImageView(R.drawable.photo3_med); case 1: return createImageView(R.drawable.photo2_med); case 2: return createImageView(R.drawable.photo4_med); case 3: return createScrollView(); case 4: return createListView(); default: return createImageView(R.drawable.photo1_med); } } @Override public boolean isViewFromObject(View view, Object object) { return view == object; } @Override public int getCount() { return 5; } @Override public Object instantiateItem(ViewGroup container, int position) { ViewPager pager = (ViewPager) container; View view = getView(position, pager); pager.addView(view); return view; } @Override public void destroyItem(ViewGroup container, int position, Object view) { container.removeView((View) view); } public View createImageView(int drawableResId) { ImageView imageView = new ImageView(getActivity()); imageView.setScaleType(ImageView.ScaleType.CENTER_CROP); imageView.setLayoutParams(new ViewGroup.LayoutParams(ViewPager.LayoutParams.MATCH_PARENT, ViewPager.LayoutParams.MATCH_PARENT)); Picasso.with(getActivity()).load(drawableResId).into(imageView); return imageView; } /** * Creates a ScrollView (used with as simple {@link at.favre.lib.dali.view.ObservableScrollView} to be able to attach a scrollListener) * that updates the blurview when it gets scrolled */ public View createScrollView() { if (scrollViewLayout == null) { scrollViewLayout = (FrameLayout) getActivity().getLayoutInflater().inflate(R.layout.inc_scrollview, binding.pager, false); ((ObservableScrollView) scrollViewLayout.findViewById(R.id.scrollview)).setScrollViewListener(new Observers.ScrollViewListener() { @Override public void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy) { blurWorker.updateBlurView(); } }); } return scrollViewLayout; } /** * Creates a ListView with a scrollListener that updates the blur view */ public View createListView() { if (listViewLayout == null) { List<String> list = new ArrayList<String>(); for (int i = 0; i < 20; i++) { list.add("This is a long line of text and so on " + i); } listViewLayout = (FrameLayout) getActivity().getLayoutInflater().inflate(R.layout.inc_listview, binding.pager, false); ((ListView) listViewLayout.findViewById(R.id.listview)).setAdapter(new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, list)); ((ListView) listViewLayout.findViewById(R.id.listview)).setOnScrollListener(new AbsListView.OnScrollListener() { @Override public void onScrollStateChanged(AbsListView absListView, int i) { } @Override public void onScroll(AbsListView absListView, int i, int i2, int i3) { blurWorker.updateBlurView(); } }); } return listViewLayout; } } }