Ver Fonte

Avoid OutOfMemory crashes on webtoon viewer increasing view holders height

inorichi há 9 anos atrás
pai
commit
f19889c222

+ 11 - 2
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonHolder.java

@@ -30,7 +30,7 @@ public class WebtoonHolder extends RecyclerView.ViewHolder {
         super(view);
         this.adapter = adapter;
         ButterKnife.bind(this, view);
-        
+
         int maxDim = ((ReaderActivity)adapter.getReader().getActivity()).getMaxBitmapSize();
 
         imageView.setParallelLoadingEnabled(true);
@@ -40,8 +40,17 @@ public class WebtoonHolder extends RecyclerView.ViewHolder {
         imageView.setMaxScale(10);
         imageView.setOnTouchListener(touchListener);
         imageView.setMaxDimensions(maxDim, maxDim);
+        imageView.setOnImageEventListener(new SubsamplingScaleImageView.DefaultOnImageEventListener() {
+            @Override
+            public void onImageLoaded() {
+                // When the image is loaded, reset the minimum height to avoid gaps
+                container.setMinimumHeight(0);
+            }
+        });
 
-        progressBar.setMinimumHeight(view.getResources().getDisplayMetrics().heightPixels);
+        // Avoid to create a lot of view holders taking all the screen height,
+        // saving memory and a possible OOM
+        container.setMinimumHeight(view.getResources().getDisplayMetrics().heightPixels);
 
         container.setOnTouchListener(touchListener);
         retryButton.setOnTouchListener((v, event) -> {

+ 1 - 1
app/src/main/java/eu/kanade/tachiyomi/ui/reader/viewer/webtoon/WebtoonReader.java

@@ -35,7 +35,7 @@ public class WebtoonReader extends BaseReader {
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
         adapter = new WebtoonAdapter(this);
         layoutManager = new PreCachingLayoutManager(getActivity());
-        layoutManager.setExtraLayoutSpace(getResources().getDisplayMetrics().heightPixels);
+        layoutManager.setExtraLayoutSpace(getResources().getDisplayMetrics().heightPixels / 2);
 
         recycler = new RecyclerView(getActivity());
         recycler.setLayoutParams(new ViewGroup.LayoutParams(MATCH_PARENT, MATCH_PARENT));

+ 1 - 1
app/src/main/res/layout/item_webtoon_reader.xml

@@ -6,7 +6,7 @@
 
     <FrameLayout
         android:layout_width="match_parent"
-        android:layout_height="300dp"
+        android:layout_height="match_parent"
         android:id="@+id/frame_container">
 
         <ProgressBar