Enable tiling to webtoon reader and add a fade in animation

This commit is contained in:
inorichi 2016-01-05 04:55:31 +01:00
parent 737d3d4282
commit 8000d67871
3 changed files with 33 additions and 9 deletions

View file

@ -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);

View file

@ -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();

View file

@ -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>