MuPDF mit curl / flip-Effekt verwenden

Ich verwende muPDF zum Lesen von PDFs in meiner Anwendung. Ich mag seine Standardanimation nicht (horizontal schalten). In der anderen Seite fand ich diese brillante Bibliothek für Curl-Effekt auf Bildern, und dieses Projekt für Flip-Klappe-Effekt auf Layouts.

In curl Beispielprojekt, in CurlActivity , sind alle Daten Bilder und setzen in PageProvider wie PageProvider :

  • Aktualisieren und Löschen von Kalenderereignissen in Android über meine Anwendung
  • Der Bluetooth-Erkennungsprozess kann nicht abgebrochen werden
  • Richtige Möglichkeit, DialogFragment zu entlassen, während die Anwendung im Hintergrund ist
  • Verweis auf Thread Object von seiner ID
  • Wie benutzt man das neueste FFMPEG im Android-Studio-Projekt?
  • Verbinden von MySql mit Android ohne PHP
  •  private class PageProvider implements CurlView.PageProvider { // Bitmap resources. private int[] mBitmapIds = { R.drawable.image1, R.drawable.image2, R.drawable.image3, R.drawable.image4}; 

    Und benutze es so:

     private CurlView mCurlView; mCurlView = (CurlView) findViewById(R.id.curl); mCurlView.setPageProvider(new PageProvider()); 

    Und CurlView erstreckt sich von GLSurfaceView und implementiert View.OnTouchListener, CurlRenderer.Observer

    Aber in muPDF, wenn ich mich nicht irre, sind die Daten im Kernobjekt. core ist Beispiel von MuPDFCore . Und damit so:

     MuPDFReaderView mDocView; MuPDFView pageView = (MuPDFView) mDocView.getDisplayedView(); mDocView.setAdapter(new MuPDFPageAdapter(this, this, core)); 

    MuPDFReaderView erweitert ReaderView und ReaderView erweitert AdapterView<Adapter> und implementiert GestureDetector.OnGestureListener, ScaleGestureDetector.OnScaleGestureListener, Runnable .

    Meine Frage ist, wo kann ich mit curl-Effekt in muPDF? Woher soll ich Seiten eins nach dem anderen bekommen und sie in Bitmaps umwandeln? Und dann ändernde Aspekte des Adapters in muPDF auf CurlView.

    In Flip-Klappe Beispielprojekt, in FlipHorizontalLayoutActivity (ich mag diesen Effekt auch), haben wir diese:

     private FlipViewController flipView; flipView = new FlipViewController(this, FlipViewController.HORIZONTAL); flipView.setAdapter(new TravelAdapter(this)); setContentView(flipView); 

    Und FlipViewController erweitert AdapterView<Adapter> und Datensatz in TravelAdapter , der BaseAdapter .

    Das hat noch niemand gemacht? Oder kann mir das helfen ?!

    BEARBEITEN:

    Ich fand einen weiteren guten Open-Source-PDF-Reader mit Curl-Effekt namens fbreaderJ . Sein Entwickler sagt: " Ein zusätzliches Modul , das erlaubt, PDF-Dateien in FBReader zu öffnen. Basierend auf radaee pdf-Bibliothek. "

    Ich bin verwirrt! Ursache radaeepdf ist geschlossen Quelle und herunterladbares Projekt ist nur für Demo und eingefügt Benutzername und Passwort ist für dieses Paket . Die Leute wollen das ganze fbreader-Projekt wie Paketname ändern.

    Ein anderes Problem für mich verwirrt ist wo ist dieser zusätzliche Modul Quellcode ?!

    Jedenfalls, wenn jemand mir helfen will, hat Fbreader es sehr gut gemacht.

    BEARBEITEN:

    Ich habe mit Robin Watts gesprochen, der muPDF (oder einen der Entwickler) entwickelte, und er sagte:

    Hast du die Plattform / Android / ClassStructure.txt gelesen? MuPDF ist in erster Linie eine C-Bibliothek. Die Standard-API ist also ein C-Typ. Anstatt diese API genau so auszusetzen, wie es Java ist (was wäre die schönste Lösung und etwas, was ich an der Arbeit gemacht habe, aber nicht wegen des Mangels an Zeit beendet habe), haben wir MuPDFCore implementiert Bits, die wir brauchten. MuPDFCore behandelt das Öffnen einer PDF-Datei und bekommt Bitmaps von ihm, um in Ansichten verwendet zu werden. Oder vielmehr gibt MuPDFCore 'Ansichten' zurück, nicht 'Bitmaps'. Wenn du Bitmaps benötigst, musst du in MuPDFCore Änderungen vornehmen.

    Es gibt zu viele Fehler beim Ändern eines kleinen Teils der MuPDFReaderView-Klasse. Ich bin verwirrt! Diese sind miteinander verwandt.

    Bitte genauer antworten.

    BEARBEITEN:

    Und die Prämie ist abgelaufen.

  • Android Wie emuliere ich das Verhalten von @android: id / leer in einem GridView?
  • Wie kann ich den Fokus auf das Recht des Textes in EditText für Android setzen?
  • Was id zu verwenden, um Promo-Codes für Android-App zu generieren
  • Senden Sie Daten an den Alarmmanager-Rundfunkempfänger
  • Fehler in maven pom xml Datei: Building Android Projekt
  • Was ist der Unterschied zwischen android.opengl und javax.microedition.khronos.opengles Pakete?
  • 2 Solutions collect form web for “MuPDF mit curl / flip-Effekt verwenden”

    Wo soll ich Seiten eins nach dem anderen bekommen und sie in Bitmaps umwandeln?

    In unserer Anwendung (Zeitungs-App) verwenden wir MuPDF, um PDFs zu rendern. Der Workflow geht so:

    1. PDF-Datei herunterladen (wir haben eine PDF pro Zeitungsseite)
    2. Render es mit MuPDF
    3. Speichern Sie die Bitmap in das Dateisystem
    4. Laden Sie die Bitmap aus dem Dateisystem als Hintergrundbild in eine Ansicht

    Also endlich, was wir verwenden, ist MuPDFCore.java und seine Methoden drawPage (…) und onDestroy ()

    Ist das, was du wissen willst oder vermisse ich den Punkt?

    BEARBEITEN

    1.) Ich denke, es ist nicht notwendig, Code zu schreiben, wie man eine Datei herunterlädt. Aber nach dem Herunterladen füge ich eine RenderTask (erweitert von Runnable) zu einem Renderqueue und löst diese Warteschlange aus. Die RenderTask benötigt einige Informationen zum Rendering:

     /** * constructs a new RenderTask instance * @param context: you need Context for MuPdfCore instance * @param pageNumber * @param pathToPdf * @param renderCallback: callback to set bitmap to the view after * rendering * @param heightOfRenderedBitmap: this is the target height * @param widthOfRenderedBitmap: this is the target width */ public RenderTask (Context context, Integer pageNumber, String pathToPdf, IRenderCallback, renderCallback, int heightOfRenderedBitmap, int widthOfRenderedBitmap) { //store things in fields } 

    2.) + 3.) Die Renderqueue wickelt die RenderTask in einen neuen Thread und startet sie. So wird die Run-Methode der RenderTask aufgerufen:

     @Override public void run () { //do not render it if file exists if (exists () == true) { finish(); return; } Bitmap bitmap = render(); //if something went wrong, we can't store the bitmap if (bitmap == null) { finish(); return; } //now save the bitmap // in my case i save the destination path in a String field imagePath = save(bitmap, new File("path/to/your/destination/folder/" + pageNumber + ".jpg")); bitmap.recycle(); finish(); } /** * let's trigger the callback */ private void finish () { if (renderCallback != null) { // i send the whole Rendertask to callback // maybe in your case it is enough to send the pageNumber or path to // renderend bitmap renderCallback.finished(this); } } /** * renders a bitmap * @return */ private Bitmap render() { MuPDFCore core = null; try { core = new MuPDFCore(context, pathToPdf); } catch (Exception e) { return null; } Bitmap bm = Bitmap.createBitmap(widthOfRenderedBitmap, heightOfRenderedBitmap, Config.ARGB_8888); // here you render the WHOLE pdf cause patch-x/-y == 0 core.drawPage(bm, 0, widthOfRenderedBitmap, heightOfRenderedBitmap, 0, 0, widthOfRenderedBitmap, heightOfRenderedBitmap, core.new Cookie()); core.onDestroy(); core = null; return bm; } /** * saves bitmap to filesystem * @param bitmap * @param image * @return */ private String save(Bitmap bitmap, File image) { FileOutputStream out = null; try { out = new FileOutputStream(image.getAbsolutePath()); bitmap.compress(Bitmap.CompressFormat.JPEG, 80, out); return image.getAbsolutePath(); } catch (Exception e) { return null; } finally { try { if (out != null) { out.close(); } } catch(Throwable ignore) {} } } 

    }

    4.) Ich denke, es ist nicht notwendig, Code zu platzieren, wie man eine Bitmap als Hintergrund einer Ansicht festlegt

    Wenn das muPDF kein Rendering für eine Bitmap unterstützt, haben Sie keine andere Wahl als das Rendering auf eine reguläre Ansicht und nehmen Sie einen Bildschirm Dump auf eine Bitmap wie folgt:

     View content = findViewById(R.id.yourPdfView); Bitmap bitmap = content.getDrawingCache(); 

    Dann benutze diese Bitmap als Eingabe in deine andere Bibliothek.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.