2017-06-05 48 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 –

相关问题