6
6
import butterknife .BindView ;
7
7
import butterknife .ButterKnife ;
8
8
import fr .free .nrw .commons .R ;
9
+ import com .facebook .drawee .drawable .ProgressBarDrawable ;
9
10
import fr .free .nrw .commons .media .zoomControllers .zoomable .DoubleTapGestureListener ;
10
11
import fr .free .nrw .commons .media .zoomControllers .zoomable .ZoomableDraweeView ;
11
12
import timber .log .Timber ;
12
13
13
14
import android .graphics .Bitmap ;
14
15
import android .graphics .BitmapFactory ;
16
+ import android .graphics .drawable .Animatable ;
15
17
import android .net .Uri ;
16
18
import android .os .Bundle ;
17
19
import com .facebook .drawee .backends .pipeline .Fresco ;
20
+ import com .facebook .drawee .controller .BaseControllerListener ;
21
+ import com .facebook .drawee .controller .ControllerListener ;
22
+ import com .facebook .drawee .drawable .ScalingUtils ;
23
+ import com .facebook .drawee .generic .GenericDraweeHierarchy ;
24
+ import com .facebook .drawee .generic .GenericDraweeHierarchyBuilder ;
18
25
import com .facebook .drawee .interfaces .DraweeController ;
19
26
import android .view .LayoutInflater ;
20
27
import android .view .View ;
21
28
import android .view .ViewGroup ;
29
+ import android .widget .ProgressBar ;
22
30
23
31
import com .facebook .drawee .view .SimpleDraweeView ;
32
+ import com .facebook .imagepipeline .image .ImageInfo ;
24
33
import com .github .chrisbanes .photoview .PhotoView ;
25
34
26
35
import java .io .InputStream ;
@@ -32,6 +41,8 @@ public class ZoomableActivity extends AppCompatActivity {
32
41
33
42
@ BindView (R .id .zoomable )
34
43
ZoomableDraweeView photo ;
44
+ @ BindView (R .id .zoom_progress_bar )
45
+ ProgressBar spinner ;
35
46
36
47
@ Override
37
48
protected void onCreate (Bundle savedInstanceState ) {
@@ -48,13 +59,42 @@ protected void onCreate(Bundle savedInstanceState) {
48
59
init ();
49
60
}
50
61
62
+ /**
63
+ * Two types of loading indicators have been added to the zoom activity:
64
+ * 1. An Indeterminate spinner for showing the time lapsed between dispatch of the image request
65
+ * and starting to receiving the image.
66
+ * 2. ProgressBarDrawable that reflects how much image has been downloaded
67
+ */
68
+ private final ControllerListener loadingListener = new BaseControllerListener <ImageInfo >() {
69
+ @ Override
70
+ public void onSubmit (String id , Object callerContext ) {
71
+ // Sometimes the spinner doesn't appear when rapidly switching between images, this fixes that
72
+ spinner .setVisibility (View .VISIBLE );
73
+ }
74
+
75
+ @ Override
76
+ public void onIntermediateImageSet (String id , @ Nullable ImageInfo imageInfo ) {
77
+ spinner .setVisibility (View .GONE );
78
+ }
79
+ @ Override
80
+ public void onFinalImageSet (String id , @ Nullable ImageInfo imageInfo , @ Nullable Animatable animatable ) {
81
+ spinner .setVisibility (View .GONE );
82
+ }
83
+ };
51
84
private void init () {
52
85
if ( imageUri != null ) {
86
+ GenericDraweeHierarchy hierarchy = GenericDraweeHierarchyBuilder .newInstance (getResources ())
87
+ .setActualImageScaleType (ScalingUtils .ScaleType .FIT_CENTER )
88
+ .setProgressBarImage (new ProgressBarDrawable ())
89
+ .setProgressBarImageScaleType (ScalingUtils .ScaleType .FIT_CENTER )
90
+ .build ();
91
+ photo .setHierarchy (hierarchy );
53
92
photo .setAllowTouchInterceptionWhileZoomed (true );
54
93
photo .setIsLongpressEnabled (false );
55
94
photo .setTapListener (new DoubleTapGestureListener (photo ));
56
95
DraweeController controller = Fresco .newDraweeControllerBuilder ()
57
96
.setUri (imageUri )
97
+ .setControllerListener (loadingListener )
58
98
.build ();
59
99
photo .setController (controller );
60
100
}
0 commit comments