2017-06-05 63 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()方法,並重新繪製您的視圖。爲了解決這個問題,你有兩種方法。首先是強制保存清單文件中的狀態。

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

如果你寫這個參數沒有必要的活動來處理,該框架將採取的東西剩下的事情。如果方向改變,它將保持屏幕或佈局的狀態。

另一種方式是由谷歌開發人員推薦的,這是更好的方式來處理方向變化中的這些問題。您可以在此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 –

相關問題