-
Notifications
You must be signed in to change notification settings - Fork 0
/
TwitterLikeImageViewerActivity.cs
108 lines (91 loc) · 4.11 KB
/
TwitterLikeImageViewerActivity.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
using System;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Support.V4.App;
using Android.Support.V4.View;
using Android.Support.V7.App;
using Android.Widget;
using AndroidSlideLayout;
namespace AndroidPageLayout.App {
[Activity(Label = "TwitterLikeImageViewerActivity", Theme = "@style/AppTheme")]
public class TwitterLikeImageViewerActivity : AppCompatActivity {
private const string transitionName = "transitionactivity_transition";
private const string extraPage = "extra_page";
private SlideLayout slideLayout;
private PageLayout pageLayout;
public static void Start(Activity activity, ImageView imageView, int page) {
var intent = new Intent(activity, typeof(TwitterLikeImageViewerActivity));
intent.PutExtra(extraPage, page);
if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop) {
var option = ActivityOptions.MakeSceneTransitionAnimation(activity, imageView, transitionName);
activity.StartActivity(intent, option.ToBundle());
} else {
activity.StartActivity(intent);
}
}
/// <summary>
/// Convert dp to px
/// </summary>
/// <param name="dp"></param>
/// <param name="context"></param>
/// <returns></returns>
private int convertDensityIndependentPixelToPixel(float dp) {
var metrics = Resources.DisplayMetrics;
return (int)(dp * ((int)metrics.DensityDpi / 160f));
}
protected override void OnCreate(Bundle savedInstanceState) {
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.TwitterLikeImageViewer);
slideLayout = FindViewById<SlideLayout>(Resource.Id.SlideLayout);
slideLayout.ViewReleased += viewReleased;
pageLayout = FindViewById<PageLayout>(Resource.Id.PageLayout);
pageLayout.FirstVisiblePageChanged += currentFirstVisiblePageChanged;
int page = Intent.GetIntExtra(extraPage, 0);
pageLayout.DefaultPage = page;
setTitle(page);
using (var imageView = FindViewById<ImageView>(Resource.Id.Image1)) {
if (page == 0) {
ViewCompat.SetTransitionName(imageView, transitionName);
}
}
using (var imageView = FindViewById<ImageView>(Resource.Id.Image2)) {
if (page == 1) {
ViewCompat.SetTransitionName(imageView, transitionName);
}
}
using (var imageView = FindViewById<ImageView>(Resource.Id.Image3)) {
if (page == 2) {
ViewCompat.SetTransitionName(imageView, transitionName);
}
}
using (var imageView = FindViewById<ImageView>(Resource.Id.Image4)) {
if (page == 3) {
ViewCompat.SetTransitionName(imageView, transitionName);
}
}
}
protected override void OnDestroy() {
slideLayout.ViewReleased -= viewReleased;
slideLayout.Dispose();
pageLayout.FirstVisiblePageChanged -= currentFirstVisiblePageChanged;
pageLayout.Dispose();
base.OnDestroy();
}
private void currentFirstVisiblePageChanged(object sender, FirstVisiblePageChangedEventArgs args) {
setTitle(args.FirstVisiblePage);
}
private void setTitle(int currentFirstVisiblePage) {
SupportActionBar.Title = $"{currentFirstVisiblePage + 1}/{pageLayout.PageCount}";
}
private void viewReleased(object sender, ViewReleasedEventArgs args) {
var slideLayout = sender as SlideLayout;
int distance = Math.Abs(slideLayout.CurrentDragChildViewLayoutedTop - slideLayout.CurrentDragChildViewDraggedTop);
int finishDistance = convertDensityIndependentPixelToPixel(150);
if (distance > finishDistance) {
args.Handled = true;
ActivityCompat.FinishAfterTransition(this);
}
}
}
}