Parcourir la source

Enable tiling to webtoon reader and add a fade in animation

inorichi il y a 9 ans
Parent
commit
8000d67871

+ 16 - 9
app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/webtoon/WebtoonAdapter.java

@@ -4,6 +4,8 @@ import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
 import android.widget.ProgressBar;
 
 import com.davemorrissey.labs.subscaleview.ImageSource;
@@ -21,13 +23,11 @@ public class WebtoonAdapter extends RecyclerView.Adapter<WebtoonAdapter.ImageHol
 
     private List<Page> pages;
     private WebtoonReader fragment;
-    private int maxBitmapSize;
     private View.OnTouchListener listener;
 
     public WebtoonAdapter(WebtoonReader fragment) {
         this.fragment = fragment;
         pages = new ArrayList<>();
-        maxBitmapSize = fragment.getReaderActivity().getMaxBitmapSize();
         listener = (v, event) -> fragment.onImageTouch(event);
     }
 
@@ -39,7 +39,7 @@ public class WebtoonAdapter extends RecyclerView.Adapter<WebtoonAdapter.ImageHol
     public ImageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         LayoutInflater inflater = fragment.getActivity().getLayoutInflater();
         View v = inflater.inflate(R.layout.item_webtoon_reader, parent, false);
-        return new ImageHolder(v, maxBitmapSize, listener);
+        return new ImageHolder(v, listener);
     }
 
     @Override
@@ -63,24 +63,31 @@ public class WebtoonAdapter extends RecyclerView.Adapter<WebtoonAdapter.ImageHol
         @Bind(R.id.page_image_view) SubsamplingScaleImageView imageView;
         @Bind(R.id.progress) ProgressBar progressBar;
 
-        public ImageHolder(View view, int maxBitmapSize, View.OnTouchListener listener) {
+        private Animation fadeInAnimation;
+
+        public ImageHolder(View view, View.OnTouchListener listener) {
             super(view);
             ButterKnife.bind(this, view);
 
+            fadeInAnimation = AnimationUtils.loadAnimation(view.getContext(), R.anim.fade_in);
+
+            imageView.setParallelLoadingEnabled(true);
             imageView.setDoubleTapZoomStyle(SubsamplingScaleImageView.ZOOM_FOCUS_FIXED);
             imageView.setPanLimit(SubsamplingScaleImageView.PAN_LIMIT_INSIDE);
             imageView.setMinimumScaleType(SubsamplingScaleImageView.SCALE_TYPE_CENTER_INSIDE);
-            imageView.setZoomEnabled(false);
-            imageView.setPanEnabled(false);
             imageView.setOnTouchListener(listener);
-            // TODO Using tiling here is annoying. RecyclerView isn't good at all for a webtoon reader
-//            imageView.setMaxDimensions(maxBitmapSize, maxBitmapSize);
+            imageView.setOnImageEventListener(new SubsamplingScaleImageView.DefaultOnImageEventListener() {
+                @Override
+                public void onImageLoaded() {
+                    imageView.startAnimation(fadeInAnimation);
+                }
+            });
         }
 
         public void onSetValues(Page page) {
             if (page.getImagePath() != null) {
                 imageView.setVisibility(View.VISIBLE);
-                imageView.setImage(ImageSource.uri(page.getImagePath()).tilingDisabled());
+                imageView.setImage(ImageSource.uri(page.getImagePath()));
                 progressBar.setVisibility(View.GONE);
             } else {
                 imageView.setVisibility(View.GONE);

+ 9 - 0
app/src/main/java/eu/kanade/mangafeed/ui/reader/viewer/webtoon/WebtoonReader.java

@@ -33,6 +33,7 @@ public class WebtoonReader extends BaseReader {
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
         adapter = new WebtoonAdapter(this);
         PreCachingLayoutManager layoutManager = new PreCachingLayoutManager(getActivity());
+        layoutManager.setExtraLayoutSpace(getResources().getDisplayMetrics().heightPixels);
 
         recycler = new RecyclerView(getActivity());
         recycler.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));
@@ -55,6 +56,14 @@ public class WebtoonReader extends BaseReader {
                 getReaderActivity().onCenterSingleTap();
                 return true;
             }
+
+            @Override
+            public boolean onDown(MotionEvent e) {
+                // The only way I've found to allow panning. Double tap event (zoom) is lost
+                // but panning should be the most used one
+                return true;
+            }
+
         });
 
         setPages();

+ 8 - 0
app/src/main/res/anim/fade_in.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<set xmlns:android="http://schemas.android.com/apk/res/android">
+    <alpha
+        android:fromAlpha="0.0"
+        android:toAlpha="1.0"
+        android:interpolator="@android:anim/accelerate_interpolator"
+        android:duration="300" />
+</set>