2017-06-05 4 views
0

私はbarteksc-AndroidPdfViewerを使用しています。私はこのコードを使用していますページの向きを変更すると、ページの始めに来る

package com.epubtest.hxfy.epubtest; 

import android.content.Context; 
import android.content.SharedPreferences; 
import android.graphics.Canvas; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.util.Log;  
import com.github.barteksc.pdfviewer.PDFView; 
import com.github.barteksc.pdfviewer.listener.OnDrawListener; 
import com.github.barteksc.pdfviewer.listener.OnErrorListener; 
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener; 
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener; 
import com.github.barteksc.pdfviewer.listener.OnPageScrollListener;  

public class PDFReaderActivity2 extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener, OnDrawListener, OnErrorListener, OnPageScrollListener { 

    private PDFView pdfview; 
    private SharedPreferences pdfReader; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_pdfreader2);  
     pdfReader = this.getSharedPreferences("PDFReader", Context.MODE_PRIVATE); 

     pdfview = (PDFView) findViewById(R.id.pdfView); 
     pdfview.fromAsset("test4.pdf") 
       .defaultPage(pdfReader.getInt("pages",0)) 
       .onPageChange(this) 
       .swipeHorizontal(false) 
       .enableAnnotationRendering(true) 
       .scrollHandle(null) 
       .onLoad(this) 
       .onDraw(this) 
       .enableSwipe(true) 
       .onError(this) 
       .enableDoubletap(true) 
       .onPageScroll(this) 
       .load(); 
    } 

    @Override 
    public void onPageChanged(int page, int pageCount) { 
     SharedPreferences.Editor edit = pdfReader.edit(); 
     edit.putInt("pages",page); 
     edit.commit(); 
    } 

    @Override 
    public void loadComplete(int nbPages) { 

    }  

    @Override 
    public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) { 

    } 

    @Override 
    public void onError(Throwable t) { 

    } 

    @Override 
    public void onPageScrolled(int page, float positionOffset) { 
    } 
} 

ページの向きを変更します。しかし、もし私が肖像画モードとページ番号15を変更した場合、私たちは風景を開始したときにページのページの向きを取る必要があります。

enter image description here enter image description here

SharedPreferences機能していません。私たちがいた場所の最後のページを記録することはできません。この点で私を助けてください、これについて私を助けてください。

答えて

0

SharePreferencesを使用しないでください。画面の向きを変更すると、システムは再度onCreate()メソッドを呼び戻し、ビューを再描画します。この問題を解決するには、2つの方法があります。最初はマニフェストファイルに状態を保存することです。

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/> 

このパラメータを記述すると、アクティビティで処理する必要がなくなり、フレームワークは残りの部分を処理します。方向が変更されると、画面またはレイアウトの状態が保持されます。

オリエンテーションの変更でこの問題を処理するには、Google開発者がお勧めします。このlinkに詳細情報があります。これを読むためにはarticleも良いでしょう。それは活動のライフサイクルです。

ソースの例が必要な場合は、ソースを自分と共有することができます。 Enjoy!

オリエンテーションの変更を処理するには、この数行をソースに追加します。お返事のためのすべての感謝の

Configurator.onRender(new OnRenderListener() { 
    @Override 
    public void onInitiallyRendered(int pages, float pageWidth, float pageHeight) { 
     pdfView.fitToWidth(); // optionally pass page number 
    } 
}); 
+0

@JavedKhanまず、 'アンドロイド:configChanges =「オリエンテーション|画面サイズは」'正常に動作しますが、それは 'pdfView.fitToWidthは()ことができませんでした;'可能であれば、上記のコードでこのメソッドを入れてくださいそれは私のために簡単に実装されます。 –

+0

このライブラリには既にこの実装されたメソッドがあります。とにかく、私はこれを私の答えに加えます。 @AhmerAfzal – JavadKhan

+0

このメソッドの 'pdfView.fitToWidth();'は幅に合わせて使用​​しましたが、 'android:configChanges =" orientation | screenSize "'を使用したときに 'pdfView.fitToWidth();'を実装できませんでした。 @JavedKhan –

関連する問題