zkit-ui 2.0.4 → 2.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (63) hide show
  1. package/README.md +56 -0
  2. package/android/build.gradle +100 -0
  3. package/android/src/main/AndroidManifest.xml +1 -0
  4. package/android/src/main/java/cn/fontree/zkit/ui/preview/GaleriaModule.kt +43 -0
  5. package/android/src/main/java/cn/fontree/zkit/ui/preview/GaleriaView.kt +305 -0
  6. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryLayoutSupport.java +450 -0
  7. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryMediaItem.java +36 -0
  8. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryPagerAdapter.java +140 -0
  9. package/android/src/main/java/cn/fontree/zkit/ui/preview/GallerySharedElementGeometry.java +25 -0
  10. package/android/src/main/java/cn/fontree/zkit/ui/preview/GallerySharedElementNames.java +39 -0
  11. package/android/src/main/java/cn/fontree/zkit/ui/preview/GallerySharedElementState.java +25 -0
  12. package/android/src/main/java/cn/fontree/zkit/ui/preview/GallerySourceViewRegistry.java +115 -0
  13. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryTransitionSnapshotView.java +60 -0
  14. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryVideoPlayerView.java +338 -0
  15. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryViewerOverlayView.java +636 -0
  16. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryViewerPageView.java +357 -0
  17. package/android/src/main/java/cn/fontree/zkit/ui/preview/GalleryViewerTransitionController.java +223 -0
  18. package/android/src/main/res/layout/galeria_player_view.xml +9 -0
  19. package/dist/all.d.ts +2 -0
  20. package/dist/all.d.ts.map +1 -1
  21. package/dist/all.js +24 -22
  22. package/dist/ui/NativeImagePreview/NativeImagePreview.d.ts +3 -0
  23. package/dist/ui/NativeImagePreview/NativeImagePreview.d.ts.map +1 -0
  24. package/dist/ui/NativeImagePreview/NativeImagePreview.js +99 -0
  25. package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts +3 -0
  26. package/dist/ui/NativeImagePreview/NativeImagePreview.web.d.ts.map +1 -0
  27. package/dist/ui/NativeImagePreview/NativeImagePreview.web.js +56 -0
  28. package/dist/ui/NativeImagePreview/context.d.ts +14 -0
  29. package/dist/ui/NativeImagePreview/context.d.ts.map +1 -0
  30. package/dist/ui/NativeImagePreview/context.js +38 -0
  31. package/dist/ui/NativeImagePreview/index.d.ts +3 -0
  32. package/dist/ui/NativeImagePreview/index.d.ts.map +1 -0
  33. package/dist/ui/NativeImagePreview/index.js +5 -0
  34. package/dist/ui/NativeImagePreview/types.d.ts +66 -0
  35. package/dist/ui/NativeImagePreview/types.d.ts.map +1 -0
  36. package/dist/ui/NativeImagePreview/types.js +2 -0
  37. package/dist/ui/NativeImagePreview/utils.d.ts +8 -0
  38. package/dist/ui/NativeImagePreview/utils.d.ts.map +1 -0
  39. package/dist/ui/NativeImagePreview/utils.js +82 -0
  40. package/expo-module.config.json +11 -0
  41. package/ios/GaleriaModule.swift +46 -0
  42. package/ios/GaleriaView.swift +253 -0
  43. package/ios/GalleryViewer/GaleriaImageLoader.swift +73 -0
  44. package/ios/GalleryViewer/GaleriaImageViewInteraction.swift +245 -0
  45. package/ios/GalleryViewer/GaleriaLayoutSupport.swift +143 -0
  46. package/ios/GalleryViewer/GaleriaMedia.swift +28 -0
  47. package/ios/GalleryViewer/GaleriaSourceViewRegistry.swift +80 -0
  48. package/ios/GalleryViewer/GaleriaVideoPlayerView.swift +437 -0
  49. package/ios/GalleryViewer/GaleriaViewerConfiguration.swift +51 -0
  50. package/ios/GalleryViewer/GaleriaViewerController.swift +745 -0
  51. package/ios/GalleryViewer/GaleriaViewerPageView.swift +623 -0
  52. package/ios/GalleryViewer/GaleriaViewerTransitionCoordinator.swift +312 -0
  53. package/package.json +20 -12
  54. package/src/all.ts +18 -0
  55. package/src/services/ImagePreviewService/README.md +19 -0
  56. package/src/ui/NativeImagePreview/NativeImagePreview.tsx +146 -0
  57. package/src/ui/NativeImagePreview/NativeImagePreview.web.tsx +37 -0
  58. package/src/ui/NativeImagePreview/README.md +111 -0
  59. package/src/ui/NativeImagePreview/context.tsx +22 -0
  60. package/src/ui/NativeImagePreview/index.tsx +18 -0
  61. package/src/ui/NativeImagePreview/types.ts +92 -0
  62. package/src/ui/NativeImagePreview/utils.ts +107 -0
  63. package/zkit-ui.podspec +13 -1
@@ -0,0 +1,357 @@
1
+ package cn.fontree.zkit.ui.preview;
2
+
3
+ import android.animation.ObjectAnimator;
4
+ import android.content.Context;
5
+ import android.graphics.Color;
6
+ import android.graphics.RectF;
7
+ import android.graphics.drawable.Drawable;
8
+ import android.util.TypedValue;
9
+ import android.view.Gravity;
10
+ import android.view.View;
11
+ import android.view.ViewTreeObserver;
12
+ import android.view.ViewGroup;
13
+ import android.widget.FrameLayout;
14
+ import android.widget.ImageView;
15
+ import android.widget.ProgressBar;
16
+
17
+ import androidx.annotation.NonNull;
18
+ import androidx.annotation.Nullable;
19
+
20
+ import com.bumptech.glide.Glide;
21
+ import com.bumptech.glide.load.engine.GlideException;
22
+ import com.bumptech.glide.request.RequestListener;
23
+ import com.bumptech.glide.request.target.Target;
24
+ import com.github.chrisbanes.photoview.PhotoView;
25
+
26
+ public final class GalleryViewerPageView extends FrameLayout {
27
+ public interface Listener {
28
+ void onDismissRequested(@NonNull GalleryViewerPageView pageView);
29
+
30
+ void onVideoCloseRequested(@NonNull GalleryViewerPageView pageView);
31
+ }
32
+
33
+ private final FrameLayout mediaContainer;
34
+ private final PhotoView photoView;
35
+ private final GalleryVideoPlayerView videoPlayerView;
36
+ private final FrameLayout loadingContainer;
37
+ private final ObjectAnimator loadingPulseAnimator;
38
+ @Nullable
39
+ private GalleryMediaItem item;
40
+ @Nullable
41
+ private Listener listener;
42
+ private boolean active;
43
+ private boolean allowParentInterceptOnImageEdge;
44
+
45
+ public GalleryViewerPageView(@NonNull Context context) {
46
+ super(context);
47
+ setLayoutParams(new LayoutParams(
48
+ ViewGroup.LayoutParams.MATCH_PARENT,
49
+ ViewGroup.LayoutParams.MATCH_PARENT
50
+ ));
51
+ setBackgroundColor(Color.TRANSPARENT);
52
+
53
+ mediaContainer = new FrameLayout(context);
54
+ mediaContainer.setLayoutParams(new LayoutParams(
55
+ ViewGroup.LayoutParams.MATCH_PARENT,
56
+ ViewGroup.LayoutParams.MATCH_PARENT
57
+ ));
58
+ mediaContainer.setBackgroundColor(Color.TRANSPARENT);
59
+ addView(mediaContainer);
60
+
61
+ photoView = new PhotoView(context);
62
+ photoView.setLayoutParams(new LayoutParams(
63
+ ViewGroup.LayoutParams.MATCH_PARENT,
64
+ ViewGroup.LayoutParams.MATCH_PARENT
65
+ ));
66
+ photoView.setScaleType(ImageView.ScaleType.FIT_CENTER);
67
+ photoView.setBackgroundColor(Color.TRANSPARENT);
68
+ photoView.setVisibility(GONE);
69
+ photoView.setOnViewTapListener((view, x, y) -> {
70
+ if (listener != null) {
71
+ listener.onDismissRequested(this);
72
+ }
73
+ });
74
+ mediaContainer.addView(photoView);
75
+
76
+ videoPlayerView = new GalleryVideoPlayerView(context);
77
+ videoPlayerView.setVisibility(GONE);
78
+ videoPlayerView.setListener(() -> {
79
+ if (listener != null) {
80
+ listener.onVideoCloseRequested(this);
81
+ }
82
+ });
83
+ videoPlayerView.setOnContentReadyListener(() -> setLoadingVisible(false));
84
+ mediaContainer.addView(videoPlayerView);
85
+
86
+ loadingContainer = new FrameLayout(context);
87
+ loadingContainer.setLayoutParams(new LayoutParams(
88
+ ViewGroup.LayoutParams.WRAP_CONTENT,
89
+ ViewGroup.LayoutParams.WRAP_CONTENT,
90
+ Gravity.CENTER
91
+ ));
92
+ ProgressBar progressBar = new ProgressBar(context);
93
+ LayoutParams progressLayoutParams = new LayoutParams(dp(28), dp(28), Gravity.CENTER);
94
+ progressBar.setLayoutParams(progressLayoutParams);
95
+ loadingContainer.addView(progressBar);
96
+ loadingContainer.setVisibility(GONE);
97
+ addView(loadingContainer);
98
+
99
+ loadingPulseAnimator = ObjectAnimator.ofFloat(loadingContainer, View.ALPHA, 0.62f, 1f);
100
+ loadingPulseAnimator.setDuration(760L);
101
+ loadingPulseAnimator.setRepeatMode(ObjectAnimator.REVERSE);
102
+ loadingPulseAnimator.setRepeatCount(ObjectAnimator.INFINITE);
103
+ }
104
+
105
+ public void setListener(@Nullable Listener listener) {
106
+ this.listener = listener;
107
+ }
108
+
109
+ public void bind(@NonNull GalleryMediaItem item) {
110
+ this.item = item;
111
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
112
+ bindImage(item);
113
+ } else {
114
+ bindVideo(item);
115
+ }
116
+ }
117
+
118
+ public void setActive(boolean active) {
119
+ this.active = active;
120
+ if (item == null || item.getMediaType() != GalleryMediaItem.MediaType.VIDEO) {
121
+ return;
122
+ }
123
+ videoPlayerView.setActive(active);
124
+ }
125
+
126
+ public void release() {
127
+ Glide.with(photoView.getContext().getApplicationContext()).clear(photoView);
128
+ photoView.setImageDrawable(null);
129
+ photoView.setScale(1f, false);
130
+ photoView.setVisibility(GONE);
131
+ videoPlayerView.release();
132
+ videoPlayerView.setVisibility(GONE);
133
+ item = null;
134
+ active = false;
135
+ setLoadingVisible(false);
136
+ }
137
+
138
+ @NonNull
139
+ public View getDragTarget() {
140
+ return mediaContainer;
141
+ }
142
+
143
+ public boolean canPageHorizontally() {
144
+ if (item == null) {
145
+ return true;
146
+ }
147
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
148
+ return photoView.getScale() <= 1.02f;
149
+ }
150
+ return true;
151
+ }
152
+
153
+ public void setAllowParentInterceptOnImageEdge(boolean allow) {
154
+ allowParentInterceptOnImageEdge = allow;
155
+ photoView.setAllowParentInterceptOnEdge(allow);
156
+ }
157
+
158
+ public boolean canBeginVerticalDismiss(float dx, float dy, float rawX, float rawY) {
159
+ if (item == null) {
160
+ return false;
161
+ }
162
+ if (Math.abs(dy) <= Math.abs(dx) * 1.02f) {
163
+ return false;
164
+ }
165
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
166
+ return photoView.getScale() <= 1.02f;
167
+ }
168
+ return !videoPlayerView.isTouchOnInteractiveControls(rawX, rawY);
169
+ }
170
+
171
+ public void setMediaHidden(boolean hidden) {
172
+ if (item == null) {
173
+ return;
174
+ }
175
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
176
+ photoView.setAlpha(hidden ? 0f : 1f);
177
+ } else {
178
+ videoPlayerView.setMediaHidden(hidden);
179
+ }
180
+ }
181
+
182
+ public void setImagePlaceholderIfEmpty(@Nullable Drawable drawable) {
183
+ if (item == null || item.getMediaType() != GalleryMediaItem.MediaType.IMAGE) {
184
+ return;
185
+ }
186
+ if (drawable == null || photoView.getDrawable() != null) {
187
+ return;
188
+ }
189
+ photoView.setVisibility(VISIBLE);
190
+ photoView.setImageDrawable(drawable);
191
+ setLoadingVisible(true);
192
+ }
193
+
194
+ @Nullable
195
+ public GallerySharedElementState sharedElementState() {
196
+ if (item == null) {
197
+ return null;
198
+ }
199
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
200
+ return GalleryLayoutSupport.captureImageViewState(photoView);
201
+ }
202
+ return videoPlayerView.sharedElementState();
203
+ }
204
+
205
+ @NonNull
206
+ public GallerySharedElementGeometry defaultTransitionGeometry(@NonNull RectF containerBounds, @Nullable Drawable fallbackDrawable) {
207
+ Drawable drawable = currentDrawable();
208
+ if (drawable == null) {
209
+ drawable = fallbackDrawable;
210
+ }
211
+ if (drawable == null) {
212
+ float fallbackWidth = Math.max(containerBounds.width() * 0.72f, 1f);
213
+ float fallbackHeight = Math.max(containerBounds.height() * 0.42f, 1f);
214
+ float left = containerBounds.left + (containerBounds.width() - fallbackWidth) * 0.5f;
215
+ float top = containerBounds.top + (containerBounds.height() - fallbackHeight) * 0.5f;
216
+ RectF visibleFrame = new RectF(left, top, left + fallbackWidth, top + fallbackHeight);
217
+ RectF contentFrame = new RectF(0f, 0f, visibleFrame.width(), visibleFrame.height());
218
+ return new GallerySharedElementGeometry(visibleFrame, contentFrame);
219
+ }
220
+ return GalleryLayoutSupport.defaultGeometryFor(drawable, containerBounds);
221
+ }
222
+
223
+ public void prepareForOpenTransition() {
224
+ if (item == null) {
225
+ return;
226
+ }
227
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
228
+ photoView.setScale(1f, false);
229
+ photoView.setAllowParentInterceptOnEdge(allowParentInterceptOnImageEdge);
230
+ } else {
231
+ videoPlayerView.prepareForReturnTransition();
232
+ }
233
+ }
234
+
235
+ public void prepareForReturnTransition() {
236
+ if (item == null) {
237
+ return;
238
+ }
239
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
240
+ photoView.setScale(1f, false);
241
+ photoView.setAllowParentInterceptOnEdge(allowParentInterceptOnImageEdge);
242
+ } else {
243
+ videoPlayerView.prepareForReturnTransition();
244
+ }
245
+ }
246
+
247
+ public void prepareForDismissDrag() {
248
+ if (item == null) {
249
+ return;
250
+ }
251
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
252
+ photoView.setScale(1f, false);
253
+ } else {
254
+ videoPlayerView.prepareForReturnTransition();
255
+ }
256
+ }
257
+
258
+ public void restoreAfterDismissCancelled() {
259
+ if (item == null || item.getMediaType() != GalleryMediaItem.MediaType.VIDEO) {
260
+ return;
261
+ }
262
+ videoPlayerView.restoreAfterDismissCancelled();
263
+ }
264
+
265
+ private void bindImage(@NonNull GalleryMediaItem item) {
266
+ photoView.setVisibility(VISIBLE);
267
+ videoPlayerView.release();
268
+ videoPlayerView.setVisibility(GONE);
269
+ photoView.setScale(1f, false);
270
+ photoView.setAllowParentInterceptOnEdge(allowParentInterceptOnImageEdge);
271
+ Glide.with(photoView).clear(photoView);
272
+ photoView.setImageDrawable(null);
273
+ setLoadingVisible(true);
274
+ Glide.with(photoView)
275
+ .load(item.getSourceUrl())
276
+ .dontAnimate()
277
+ .listener(new RequestListener<Drawable>() {
278
+ @Override
279
+ public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target, boolean isFirstResource) {
280
+ setLoadingVisible(false);
281
+ return false;
282
+ }
283
+
284
+ @Override
285
+ public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, com.bumptech.glide.load.DataSource dataSource, boolean isFirstResource) {
286
+ setLoadingVisible(false);
287
+ applyDynamicPhotoScaleBounds();
288
+ return false;
289
+ }
290
+ })
291
+ .into(photoView);
292
+ }
293
+
294
+ private void applyDynamicPhotoScaleBounds() {
295
+ photoView.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
296
+ @Override
297
+ public boolean onPreDraw() {
298
+ photoView.getViewTreeObserver().removeOnPreDrawListener(this);
299
+ RectF displayRect = photoView.getDisplayRect();
300
+ if (displayRect == null || displayRect.width() <= 0f || displayRect.height() <= 0f) {
301
+ return true;
302
+ }
303
+
304
+ float fillWidthScale = photoView.getWidth() > 0 ? photoView.getWidth() / displayRect.width() : 1f;
305
+ float fillHeightScale = photoView.getHeight() > 0 ? photoView.getHeight() / displayRect.height() : 1f;
306
+ float coverViewportScale = Math.max(fillWidthScale, fillHeightScale);
307
+ float maximumScale = Math.max(4f, Math.min(coverViewportScale * 3f, 32f));
308
+ float mediumScale = Math.min(Math.max(2f, coverViewportScale), maximumScale * 0.5f);
309
+
310
+ photoView.setScaleLevels(1f, mediumScale, maximumScale);
311
+ return true;
312
+ }
313
+ });
314
+ }
315
+
316
+ private void bindVideo(@NonNull GalleryMediaItem item) {
317
+ photoView.setVisibility(GONE);
318
+ Glide.with(photoView).clear(photoView);
319
+ photoView.setImageDrawable(null);
320
+ videoPlayerView.setVisibility(VISIBLE);
321
+ videoPlayerView.bind(item);
322
+ videoPlayerView.setActive(active);
323
+ setLoadingVisible(true);
324
+ }
325
+
326
+ @Nullable
327
+ private Drawable currentDrawable() {
328
+ if (item == null) {
329
+ return null;
330
+ }
331
+ if (item.getMediaType() == GalleryMediaItem.MediaType.IMAGE) {
332
+ return photoView.getDrawable();
333
+ }
334
+ return videoPlayerView.getPosterDrawable();
335
+ }
336
+
337
+ private void setLoadingVisible(boolean visible) {
338
+ if (visible) {
339
+ loadingContainer.setVisibility(VISIBLE);
340
+ if (!loadingPulseAnimator.isRunning()) {
341
+ loadingPulseAnimator.start();
342
+ }
343
+ return;
344
+ }
345
+ loadingPulseAnimator.cancel();
346
+ loadingContainer.setAlpha(1f);
347
+ loadingContainer.setVisibility(GONE);
348
+ }
349
+
350
+ private int dp(int value) {
351
+ return (int) TypedValue.applyDimension(
352
+ TypedValue.COMPLEX_UNIT_DIP,
353
+ value,
354
+ getResources().getDisplayMetrics()
355
+ );
356
+ }
357
+ }
@@ -0,0 +1,223 @@
1
+ package cn.fontree.zkit.ui.preview;
2
+
3
+ import android.animation.Animator;
4
+ import android.animation.AnimatorListenerAdapter;
5
+ import android.animation.ValueAnimator;
6
+ import android.graphics.RectF;
7
+ import android.view.View;
8
+ import android.view.animation.DecelerateInterpolator;
9
+ import android.widget.FrameLayout;
10
+ import android.widget.ImageView;
11
+
12
+ import androidx.annotation.NonNull;
13
+ import androidx.annotation.Nullable;
14
+
15
+ public final class GalleryViewerTransitionController {
16
+ private final FrameLayout containerView;
17
+ private final View backgroundView;
18
+ private final View contentView;
19
+ @Nullable
20
+ private GalleryTransitionSnapshotView snapshotView;
21
+ @Nullable
22
+ private ImageView hiddenSourceView;
23
+
24
+ public GalleryViewerTransitionController(
25
+ @NonNull FrameLayout containerView,
26
+ @NonNull View backgroundView,
27
+ @NonNull View contentView
28
+ ) {
29
+ this.containerView = containerView;
30
+ this.backgroundView = backgroundView;
31
+ this.contentView = contentView;
32
+ }
33
+
34
+ public void performOpenTransition(
35
+ @Nullable ImageView sourceView,
36
+ @Nullable GallerySharedElementState sourceState,
37
+ @NonNull GallerySharedElementGeometry targetGeometry,
38
+ @NonNull Runnable completion
39
+ ) {
40
+ clearSnapshot();
41
+ backgroundView.setAlpha(0f);
42
+ contentView.setAlpha(0f);
43
+ hiddenSourceView = sourceView;
44
+ if (hiddenSourceView != null) {
45
+ hiddenSourceView.setAlpha(0f);
46
+ }
47
+ if (sourceState == null) {
48
+ backgroundView.animate()
49
+ .alpha(1f)
50
+ .setDuration(220L)
51
+ .setInterpolator(new DecelerateInterpolator())
52
+ .withEndAction(completion)
53
+ .start();
54
+ return;
55
+ }
56
+
57
+ GallerySharedElementGeometry sourceGeometry = frameInContainer(sourceState.getGeometry());
58
+ GallerySharedElementGeometry endGeometry = frameInContainer(targetGeometry);
59
+ snapshotView = new GalleryTransitionSnapshotView(containerView.getContext(), sourceState.getDrawable());
60
+ containerView.addView(snapshotView);
61
+ snapshotView.applyGeometry(sourceGeometry);
62
+ animateSnapshot(
63
+ sourceGeometry,
64
+ endGeometry,
65
+ 0f,
66
+ 1f,
67
+ 300L,
68
+ completion
69
+ );
70
+ }
71
+
72
+ public void completeOpenTransition(@NonNull Runnable completion) {
73
+ contentView.animate()
74
+ .alpha(1f)
75
+ .setDuration(140L)
76
+ .setInterpolator(new DecelerateInterpolator())
77
+ .setListener(new AnimatorListenerAdapter() {
78
+ @Override
79
+ public void onAnimationEnd(Animator animation) {
80
+ restoreHiddenSourceView();
81
+ clearSnapshot();
82
+ completion.run();
83
+ }
84
+ })
85
+ .start();
86
+ }
87
+
88
+ public void performCloseTransition(
89
+ @Nullable GallerySharedElementState pageState,
90
+ @Nullable GallerySharedElementGeometry targetGeometry,
91
+ @Nullable ImageView targetView,
92
+ @NonNull Runnable completion
93
+ ) {
94
+ clearSnapshot();
95
+ float backgroundStartAlpha = backgroundView.getAlpha();
96
+ if (pageState == null || targetGeometry == null) {
97
+ contentView.animate()
98
+ .alpha(0f)
99
+ .setDuration(180L)
100
+ .setInterpolator(new DecelerateInterpolator())
101
+ .start();
102
+ backgroundView.animate()
103
+ .alpha(0f)
104
+ .setDuration(180L)
105
+ .setInterpolator(new DecelerateInterpolator())
106
+ .withEndAction(completion)
107
+ .start();
108
+ return;
109
+ }
110
+
111
+ if (targetView != null) {
112
+ targetView.setAlpha(0f);
113
+ }
114
+ GallerySharedElementGeometry startGeometry = frameInContainer(pageState.getGeometry());
115
+ GallerySharedElementGeometry endGeometry = frameInContainer(targetGeometry);
116
+ snapshotView = new GalleryTransitionSnapshotView(containerView.getContext(), pageState.getDrawable());
117
+ containerView.addView(snapshotView);
118
+ snapshotView.applyGeometry(startGeometry);
119
+ animateSnapshot(
120
+ startGeometry,
121
+ endGeometry,
122
+ backgroundStartAlpha,
123
+ 0f,
124
+ 280L,
125
+ () -> {
126
+ if (targetView != null) {
127
+ targetView.setAlpha(1f);
128
+ }
129
+ clearSnapshot();
130
+ completion.run();
131
+ }
132
+ );
133
+ contentView.animate()
134
+ .alpha(0f)
135
+ .setDuration(280L)
136
+ .setInterpolator(new DecelerateInterpolator())
137
+ .start();
138
+ }
139
+
140
+ private void animateSnapshot(
141
+ @NonNull GallerySharedElementGeometry startGeometry,
142
+ @NonNull GallerySharedElementGeometry endGeometry,
143
+ float backgroundStartAlpha,
144
+ float backgroundEndAlpha,
145
+ long durationMs,
146
+ @NonNull Runnable completion
147
+ ) {
148
+ GalleryTransitionSnapshotView localSnapshotView = snapshotView;
149
+ if (localSnapshotView == null) {
150
+ completion.run();
151
+ return;
152
+ }
153
+ ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f);
154
+ animator.setDuration(durationMs);
155
+ animator.setInterpolator(new DecelerateInterpolator());
156
+ animator.addUpdateListener(valueAnimator -> {
157
+ float progress = (float) valueAnimator.getAnimatedValue();
158
+ localSnapshotView.applyGeometry(interpolateGeometry(startGeometry, endGeometry, progress));
159
+ backgroundView.setAlpha(lerp(backgroundStartAlpha, backgroundEndAlpha, progress));
160
+ });
161
+ animator.addListener(new AnimatorListenerAdapter() {
162
+ @Override
163
+ public void onAnimationEnd(Animator animation) {
164
+ backgroundView.setAlpha(backgroundEndAlpha);
165
+ completion.run();
166
+ }
167
+ });
168
+ animator.start();
169
+ }
170
+
171
+ @NonNull
172
+ private GallerySharedElementGeometry interpolateGeometry(
173
+ @NonNull GallerySharedElementGeometry start,
174
+ @NonNull GallerySharedElementGeometry end,
175
+ float progress
176
+ ) {
177
+ RectF visibleFrame = interpolateRect(start.getVisibleFrameInWindow(), end.getVisibleFrameInWindow(), progress);
178
+ RectF contentFrame = interpolateRect(start.getContentFrameInVisibleBounds(), end.getContentFrameInVisibleBounds(), progress);
179
+ return new GallerySharedElementGeometry(visibleFrame, contentFrame);
180
+ }
181
+
182
+ @NonNull
183
+ private RectF interpolateRect(@NonNull RectF start, @NonNull RectF end, float progress) {
184
+ return new RectF(
185
+ lerp(start.left, end.left, progress),
186
+ lerp(start.top, end.top, progress),
187
+ lerp(start.right, end.right, progress),
188
+ lerp(start.bottom, end.bottom, progress)
189
+ );
190
+ }
191
+
192
+ @NonNull
193
+ private GallerySharedElementGeometry frameInContainer(@NonNull GallerySharedElementGeometry geometry) {
194
+ int[] location = new int[2];
195
+ containerView.getLocationOnScreen(location);
196
+ RectF visibleFrame = geometry.getVisibleFrameInWindow();
197
+ visibleFrame.offset(-location[0], -location[1]);
198
+ return new GallerySharedElementGeometry(
199
+ visibleFrame,
200
+ geometry.getContentFrameInVisibleBounds()
201
+ );
202
+ }
203
+
204
+ private float lerp(float start, float end, float progress) {
205
+ return start + (end - start) * progress;
206
+ }
207
+
208
+ private void restoreHiddenSourceView() {
209
+ if (hiddenSourceView == null) {
210
+ return;
211
+ }
212
+ hiddenSourceView.setAlpha(1f);
213
+ hiddenSourceView = null;
214
+ }
215
+
216
+ private void clearSnapshot() {
217
+ if (snapshotView == null) {
218
+ return;
219
+ }
220
+ containerView.removeView(snapshotView);
221
+ snapshotView = null;
222
+ }
223
+ }
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <androidx.media3.ui.PlayerView xmlns:android="http://schemas.android.com/apk/res/android"
3
+ xmlns:app="http://schemas.android.com/apk/res-auto"
4
+ android:layout_width="match_parent"
5
+ android:layout_height="match_parent"
6
+ android:background="@android:color/transparent"
7
+ app:resize_mode="fit"
8
+ app:surface_type="texture_view"
9
+ app:use_controller="true" />
package/dist/all.d.ts CHANGED
@@ -30,6 +30,8 @@ export { Radio, RadioGroup, RadioIndicator } from './ui/Radio/index';
30
30
  export type { RadioColors, RadioGroupAlign, RadioGroupOrientation, RadioGroupProps, RadioIndicatorProps, RadioLabelPlacement, RadioLayout, RadioProps, RadioRef, RadioSize, RadioSlotProps, RadioTone, RadioValue, RadioVariant, } from './ui/Radio/index';
31
31
  export { LinkedScroll } from './ui/LinkedScroll/index';
32
32
  export type { LinkedScrollChangeMeta, LinkedScrollChangeSource, LinkedScrollItem, LinkedScrollMenuItemRenderContext, LinkedScrollProps, LinkedScrollSectionRenderContext, LinkedScrollValue, } from './ui/LinkedScroll/index';
33
+ export { NativeImagePreview } from './ui/NativeImagePreview/index';
34
+ export type { NativeImagePreviewChangeEvent, NativeImagePreviewChangeEventPayload, NativeImagePreviewChangeMeta, NativeImagePreviewChangeReason, NativeImagePreviewColorScheme, NativeImagePreviewComponent, NativeImagePreviewItem, NativeImagePreviewItemDescriptor, NativeImagePreviewItemProps, NativeImagePreviewMediaType, NativeImagePreviewNativeProps, NativeImagePreviewProps, NativeImagePreviewResolvedItem, NativeImagePreviewResolvedColorScheme, NativeImagePreviewSource, } from './ui/NativeImagePreview/index';
33
35
  export { ThemeProvider } from './theme/ThemeProvider';
34
36
  export { useTheme } from './theme/useTheme';
35
37
  export type { Theme, ThemeOverride } from './theme/types';
package/dist/all.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"all.d.ts","sourceRoot":"","sources":["../src/all.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"all.d.ts","sourceRoot":"","sources":["../src/all.ts"],"names":[],"mappings":"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"}