Make image transitions work in replies popups

filtering
Floens 10 years ago
parent afea1d063a
commit b18a65982a
  1. 3
      Clover/app/src/main/java/org/floens/chan/ui/controller/ImageViewerController.java
  2. 25
      Clover/app/src/main/java/org/floens/chan/ui/controller/PostRepliesController.java
  3. 10
      Clover/app/src/main/java/org/floens/chan/ui/helper/PostPopupHelper.java
  4. 6
      Clover/app/src/main/java/org/floens/chan/ui/layout/ThreadLayout.java
  5. 24
      Clover/app/src/main/java/org/floens/chan/ui/view/TransitionImageView.java

@ -310,6 +310,9 @@ public class ImageViewerController extends Controller implements View.OnClickLis
endAnimation = new AnimatorSet(); endAnimation = new AnimatorSet();
if (!setTransitionViewData(startImage) || bitmap == null) { if (!setTransitionViewData(startImage) || bitmap == null) {
if (bitmap != null) {
previewImage.setBitmap(bitmap);
}
ValueAnimator backgroundAlpha = ValueAnimator.ofFloat(1f, 0f); ValueAnimator backgroundAlpha = ValueAnimator.ofFloat(1f, 0f);
backgroundAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { backgroundAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override @Override

@ -17,11 +17,13 @@ import android.widget.TextView;
import org.floens.chan.R; import org.floens.chan.R;
import org.floens.chan.controller.Controller; import org.floens.chan.controller.Controller;
import org.floens.chan.core.model.Post; import org.floens.chan.core.model.Post;
import org.floens.chan.core.model.PostImage;
import org.floens.chan.core.presenter.ThreadPresenter; import org.floens.chan.core.presenter.ThreadPresenter;
import org.floens.chan.core.settings.ChanSettings; import org.floens.chan.core.settings.ChanSettings;
import org.floens.chan.ui.helper.PostPopupHelper; import org.floens.chan.ui.helper.PostPopupHelper;
import org.floens.chan.ui.view.LoadView; import org.floens.chan.ui.view.LoadView;
import org.floens.chan.ui.view.PostView; import org.floens.chan.ui.view.PostView;
import org.floens.chan.ui.view.ThumbnailView;
import org.floens.chan.utils.ThemeHelper; import org.floens.chan.utils.ThemeHelper;
public class PostRepliesController extends Controller { public class PostRepliesController extends Controller {
@ -34,6 +36,7 @@ public class PostRepliesController extends Controller {
private boolean first = true; private boolean first = true;
private LoadView loadView; private LoadView loadView;
private ListView listView;
public PostRepliesController(Context context, PostPopupHelper postPopupHelper, ThreadPresenter presenter) { public PostRepliesController(Context context, PostPopupHelper postPopupHelper, ThreadPresenter presenter) {
super(context); super(context);
@ -75,6 +78,26 @@ public class PostRepliesController extends Controller {
} }
} }
public ThumbnailView getThumbnail(PostImage postImage) {
if (listView == null) {
return null;
} else {
ThumbnailView thumbnail = null;
for (int i = 0; i < listView.getChildCount(); i++) {
View view = listView.getChildAt(i);
if (view instanceof PostView) {
PostView postView = (PostView) view;
Post post = postView.getPost();
if (post.hasImage && post.imageUrl.equals(postImage.imageUrl)) {
thumbnail = postView.getThumbnail();
break;
}
}
}
return thumbnail;
}
}
public void setPostRepliesData(PostPopupHelper.RepliesData data) { public void setPostRepliesData(PostPopupHelper.RepliesData data) {
displayData(data); displayData(data);
} }
@ -87,7 +110,7 @@ public class PostRepliesController extends Controller {
dataView = inflateRes(R.layout.post_replies); dataView = inflateRes(R.layout.post_replies);
} }
ListView listView = (ListView) dataView.findViewById(R.id.post_list); listView = (ListView) dataView.findViewById(R.id.post_list);
View repliesBack = dataView.findViewById(R.id.replies_back); View repliesBack = dataView.findViewById(R.id.replies_back);
repliesBack.setOnClickListener(new View.OnClickListener() { repliesBack.setOnClickListener(new View.OnClickListener() {

@ -21,8 +21,10 @@ import android.content.Context;
import org.floens.chan.controller.Controller; import org.floens.chan.controller.Controller;
import org.floens.chan.core.model.Post; import org.floens.chan.core.model.Post;
import org.floens.chan.core.model.PostImage;
import org.floens.chan.core.presenter.ThreadPresenter; import org.floens.chan.core.presenter.ThreadPresenter;
import org.floens.chan.ui.controller.PostRepliesController; import org.floens.chan.ui.controller.PostRepliesController;
import org.floens.chan.ui.view.ThumbnailView;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -69,6 +71,14 @@ public class PostPopupHelper {
dismiss(); dismiss();
} }
public boolean isOpen() {
return presentingController != null && presentingController.alive;
}
public ThumbnailView getThumbnail(PostImage postImage) {
return presentingController.getThumbnail(postImage);
}
public void postClicked(Post p) { public void postClicked(Post p) {
popAll(); popAll();
presenter.highlightPost(p.no); presenter.highlightPost(p.no);

@ -176,7 +176,11 @@ public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPres
} }
public ThumbnailView getThumbnail(PostImage postImage) { public ThumbnailView getThumbnail(PostImage postImage) {
return threadListLayout.getThumbnail(postImage); if (postPopupHelper.isOpen()) {
return postPopupHelper.getThumbnail(postImage);
} else {
return threadListLayout.getThumbnail(postImage);
}
} }
private void switchVisible(boolean visible) { private void switchVisible(boolean visible) {

@ -43,6 +43,30 @@ public class TransitionImageView extends View {
init(); init();
} }
public void setBitmap(Bitmap bitmap) {
this.bitmap = bitmap;
bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());
// Center inside method
float selfWidth = getWidth();
float selfHeight = getHeight();
float destScale = Math.min(
selfWidth / (float) bitmap.getWidth(),
selfHeight / (float) bitmap.getHeight());
RectF output = new RectF(
(selfWidth - bitmap.getWidth() * destScale) * 0.5f,
(selfHeight - bitmap.getHeight() * destScale) * 0.5f, 0, 0);
output.right = bitmap.getWidth() * destScale + output.left;
output.bottom = bitmap.getHeight() * destScale + output.top;
destRect.set(output);
matrix.setRectToRect(bitmapRect, destRect, Matrix.ScaleToFit.FILL);
}
public void setSourceImageView(Point windowLocation, Point viewSize, Bitmap bitmap) { public void setSourceImageView(Point windowLocation, Point viewSize, Bitmap bitmap) {
this.bitmap = bitmap; this.bitmap = bitmap;
bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight()); bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());

Loading…
Cancel
Save