需求: 最近公司要求項目中增加資料庫, 能在線查看pdf格式的文件, 且只能查看不能下載 .
在網(wǎng)上找了不少文章, 說實話都不是很理想, 要么需要收費, 要么基本都只支持本地查看, 后來果斷直接在github搜索, 找到了合適的第三方框架 :
Android PdfViewer:
項目地址: https://github.com/barteksc/AndroidPdfViewer
功能很強大, 使用也比較廣, 親測可以使用.
唯一的缺點 :添加到項目中 會使apk增加16M, 這是最不能接受的, 故棄用.
PdfViewPager:
項目地址: https://github.com/voghDev/PdfViewPager
可加載assets/SD卡/URL(在線預(yù)覽) ,(ps: 我目前就是使用的此框架)
優(yōu)點: 使用比較方便, 也不大
使用:
-
依賴:
compile 'es.voghdev.pdfviewpager:library:1.0.3'
-
xml布局 (可根據(jù)自己項目, 增減)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res /android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <RelativeLayout android:id="@+id/rl_root" style="@style/title_style"> <ImageView android:id="@+id/iv_back" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_centerVertical="true" android:paddingLeft="@dimen/value15" android:src="@drawable/icon_back" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="資料詳情" android:textColor="@color/color_white" android:textSize="16sp" /> </RelativeLayout> <RelativeLayout android:id="@+id/remote_pdf_root" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@id/rl_root"> <es.voghdev.pdfviewpager.library.PDFViewPager android:id="@+id/pdfViewPager" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout> <ProgressBar android:id="@+id/pb_bar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:layout_gravity="center" /> </RelativeLayout>
-
activity (注釋很詳細(xì), 慢慢看)
public class PDFDatabaseActivity extends BaseActivity implements DownloadFile.Listener { private RelativeLayout pdf_root; private ProgressBar pb_bar; private RemotePDFViewPager remotePDFViewPager; private String mUrl = "http://partners.adobe.com/public/developer/en/xml/AdobeXMLFormsSamples.pdf"; private PDFPagerAdapter adapter; private ImageView iv_back; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_database); initView(); setDownloadListener(); } protected void initView() { pdf_root = (RelativeLayout) findViewById(R.id.remote_pdf_root); pb_bar = (ProgressBar) findViewById(R.id.pb_bar); iv_back = (ImageView) findViewById(R.id.iv_back); iv_back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { finish(); } }); } /*設(shè)置監(jiān)聽*/ protected void setDownloadListener() { final DownloadFile.Listener listener = this; remotePDFViewPager = new RemotePDFViewPager(this, mUrl, listener); remotePDFViewPager.setId(R.id.pdfViewPager); } /*加載成功調(diào)用*/ @Override public void onSuccess(String url, String destinationPath) { pb_bar.setVisibility(View.GONE); adapter = new PDFPagerAdapter(this, FileUtil.extractFileNameFromURL(url)); remotePDFViewPager.setAdapter(adapter); updateLayout(); } /*更新視圖*/ private void updateLayout() { pdf_root.removeAllViewsInLayout(); pdf_root.addView(remotePDFViewPager, LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); } /*加載失敗調(diào)用*/ @Override public void onFailure(Exception e) { pb_bar.setVisibility(View.GONE); ToastUitl.show(this, "數(shù)據(jù)加載錯誤"); } @Override public void onProgressUpdate(int progress, int total) { } }
希望對大家有所幫助 !