19
19
import android .graphics .Bitmap ;
20
20
import android .graphics .Canvas ;
21
21
import android .graphics .Color ;
22
+ import android .graphics .ColorMatrix ;
23
+ import android .graphics .ColorMatrixColorFilter ;
22
24
import android .graphics .Paint ;
23
25
import android .graphics .Paint .Style ;
24
26
import android .graphics .PaintFlagsDrawFilter ;
40
42
import com .github .barteksc .pdfviewer .listener .OnDrawListener ;
41
43
import com .github .barteksc .pdfviewer .listener .OnErrorListener ;
42
44
import com .github .barteksc .pdfviewer .listener .OnLoadCompleteListener ;
45
+ import com .github .barteksc .pdfviewer .listener .OnLongPressListener ;
43
46
import com .github .barteksc .pdfviewer .listener .OnPageChangeListener ;
44
47
import com .github .barteksc .pdfviewer .listener .OnPageErrorListener ;
45
48
import com .github .barteksc .pdfviewer .listener .OnPageScrollListener ;
46
49
import com .github .barteksc .pdfviewer .listener .OnRenderListener ;
47
50
import com .github .barteksc .pdfviewer .listener .OnTapListener ;
48
- import com .github .barteksc .pdfviewer .listener .OnLongPressListener ;
49
51
import com .github .barteksc .pdfviewer .model .PagePart ;
50
52
import com .github .barteksc .pdfviewer .scroll .ScrollHandle ;
51
53
import com .github .barteksc .pdfviewer .source .AssetSource ;
@@ -178,6 +180,8 @@ enum ScrollDir {
178
180
179
181
private boolean doubletapEnabled = true ;
180
182
183
+ private boolean nightMode = false ;
184
+
181
185
private boolean pageSnap = true ;
182
186
183
187
/** Pdfium core for loading and rendering PDFs */
@@ -373,6 +377,23 @@ public void setSwipeEnabled(boolean enableSwipe) {
373
377
this .enableSwipe = enableSwipe ;
374
378
}
375
379
380
+ public void setNightMode (boolean nightMode ) {
381
+ this .nightMode = nightMode ;
382
+ if (nightMode ) {
383
+ ColorMatrix colorMatrixInverted =
384
+ new ColorMatrix (new float []{
385
+ -1 , 0 , 0 , 0 , 255 ,
386
+ 0 , -1 , 0 , 0 , 255 ,
387
+ 0 , 0 , -1 , 0 , 255 ,
388
+ 0 , 0 , 0 , 1 , 0 });
389
+
390
+ ColorMatrixColorFilter filter = new ColorMatrixColorFilter (colorMatrixInverted );
391
+ paint .setColorFilter (filter );
392
+ } else {
393
+ paint .setColorFilter (null );
394
+ }
395
+ }
396
+
376
397
void enableDoubletap (boolean enableDoubletap ) {
377
398
this .doubletapEnabled = enableDoubletap ;
378
399
}
@@ -549,7 +570,7 @@ protected void onDraw(Canvas canvas) {
549
570
550
571
Drawable bg = getBackground ();
551
572
if (bg == null ) {
552
- canvas .drawColor (Color .WHITE );
573
+ canvas .drawColor (nightMode ? Color . BLACK : Color .WHITE );
553
574
} else {
554
575
bg .draw (canvas );
555
576
}
@@ -1313,6 +1334,8 @@ public class Configurator {
1313
1334
1314
1335
private boolean pageSnap = false ;
1315
1336
1337
+ private boolean nightMode = false ;
1338
+
1316
1339
private Configurator (DocumentSource documentSource ) {
1317
1340
this .documentSource = documentSource ;
1318
1341
}
@@ -1442,6 +1465,11 @@ public Configurator pageFling(boolean pageFling) {
1442
1465
return this ;
1443
1466
}
1444
1467
1468
+ public Configurator nightMode (boolean nightMode ) {
1469
+ this .nightMode = nightMode ;
1470
+ return this ;
1471
+ }
1472
+
1445
1473
public void load () {
1446
1474
if (!hasSize ) {
1447
1475
waitingDocumentConfigurator = this ;
@@ -1460,6 +1488,7 @@ public void load() {
1460
1488
PDFView .this .callbacks .setOnPageError (onPageErrorListener );
1461
1489
PDFView .this .callbacks .setLinkHandler (linkHandler );
1462
1490
PDFView .this .setSwipeEnabled (enableSwipe );
1491
+ PDFView .this .setNightMode (nightMode );
1463
1492
PDFView .this .enableDoubletap (enableDoubletap );
1464
1493
PDFView .this .setDefaultPage (defaultPage );
1465
1494
PDFView .this .setSwipeVertical (!swipeHorizontal );
0 commit comments