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();
if (!setTransitionViewData(startImage) || bitmap == null) {
if (bitmap != null) {
previewImage.setBitmap(bitmap);
}
ValueAnimator backgroundAlpha = ValueAnimator.ofFloat(1f, 0f);
backgroundAlpha.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override

@ -17,11 +17,13 @@ import android.widget.TextView;
import org.floens.chan.R;
import org.floens.chan.controller.Controller;
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.settings.ChanSettings;
import org.floens.chan.ui.helper.PostPopupHelper;
import org.floens.chan.ui.view.LoadView;
import org.floens.chan.ui.view.PostView;
import org.floens.chan.ui.view.ThumbnailView;
import org.floens.chan.utils.ThemeHelper;
public class PostRepliesController extends Controller {
@ -34,6 +36,7 @@ public class PostRepliesController extends Controller {
private boolean first = true;
private LoadView loadView;
private ListView listView;
public PostRepliesController(Context context, PostPopupHelper postPopupHelper, ThreadPresenter presenter) {
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) {
displayData(data);
}
@ -87,7 +110,7 @@ public class PostRepliesController extends Controller {
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);
repliesBack.setOnClickListener(new View.OnClickListener() {

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

@ -176,7 +176,11 @@ public class ThreadLayout extends LoadView implements ThreadPresenter.ThreadPres
}
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) {

@ -43,6 +43,30 @@ public class TransitionImageView extends View {
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) {
this.bitmap = bitmap;
bitmapRect.set(0, 0, bitmap.getWidth(), bitmap.getHeight());

Loading…
Cancel
Save