博客找回来了,在那更新 http://blog.youkuaiyun.com/sky_pjf
前
时间好快,又一周过了,发现自己太忙了,博客都没去管……
序
*MuPDF开源框架现在一直都在维护,我一般都会隔一周就去官网看看有没有更新,因为我想看看他们的工程师们是否即将推出阅读PDF除外的格式文件,这对我目前的项目来说也会节省一些时间。
*好了,话不多说,直接进入重要环节—–分析源码
分析
初看项目工程目录结构,不是很多,直接看类的字面意思均可以得出一些浅显易懂的知识点
1.看清单文件得出来有4个activity
在ChooseActivity中,添加了多个intent-filter意图过滤器,其作用就是规定一些格式文件,一些支持的类型
2.进入src中
tip :项目代码中大量运用枚举
ChoosePDFActivity是程序的主界面,分类型,是文件夹是就进行打开,pdf就跳转等待结果
ChoosePDFAdapter是加载sd卡文件信息,3中type:上一层,文件夹,文件
MuPDFReflowView继承WebView
MuPDFCore 是声明本地方法并加载so的类:功能用c实现
/* The core rendering instance */
enum TopBarMode {Main, Search, Annot, Delete, More, Accept};
enum AcceptMode {Highlight, Underline, StrikeOut, Ink, CopyText};
3.再看xml
布局文件在 buttons.xml下,采用的是ViewAnimator(视图切换)
draw的逻辑分析
draw相关的类
MuPDFActivity MuPDFReaderView ReaderView PageView MuPDFPageView
充分利用 ctrl+shift +F 查找你想要的信息
//墨迹Ink 绘制按钮
public void OnInkButtonClick(View v) {
mTopBarMode = TopBarMode.Accept;
mTopBarSwitcher.setDisplayedChild(mTopBarMode.ordinal());
mAcceptMode = AcceptMode.Ink;
mDocView.setMode(MuPDFReaderView.Mode.Drawing);
mAnnotTypeText.setText(R.string.ink);
showInfo(getString(R.string.draw_annotation));
}
在源PDF文件上绘制图层,找到触发绘制的事件,追踪绘制的逻辑
MuPDFActivity MuPDFReaderView ReaderView PageView MuPDFPageView
Point类: Point holds two integer coordinates
MuPDFPageView继承PageView
在MuPDFReaderView中
touch事件
touch_start touch_move
在方法中都使用MuPDFView,实现MuPDFView接口,中startDraw continueDraw方法
有个问题:当状态为 Drawing时,双手可以进行缩放
Annot 是Annotation的缩写:代表注释状态
总结如下:
1.mupdfdemo他核心代码是用本地C写的,java调用在MuPDFCore类中
2.几个重要的类分别是
MuPDFActivity控制相关按钮事件
PageView中绘制相关
MuPDFView 继承PageView
reflow 跟重排版文档相关
print 跟打印相关
ordinary 回到TopBarMode.main类型
重点分析MuPDFActivity.java
//注释 点击已绘制区域,可删除
public void OnDeleteButtonClick(View v) {
MuPDFView pageView = (MuPDFView) mDocView.getDisplayedView();
if (pageView != null)
pageView.deleteSelectedAnnotation();
LogUtils.d(TAG, "OnDeleteButtonClick: ");
mTopBarMode = TopBarMode.Annot;
mTopBarSwitcher.setDisplayedChild(mTopBarMode.ordinal());
}
//注释 点击已绘制区域,可返回
public void OnCancelDeleteButtonClick(View v) {
MuPDFView pageView = (MuPDFView) mDocView.getDisplayedView();
if (pageView != null)
pageView.deselectAnnotation();
LogUtils.d(TAG, "OnCancelDeleteButtonClick: ");
mTopBarMode = TopBarMode.Annot;
mTopBarSwitcher.setDisplayedChild(mTopBarMode.ordinal());
}
思路
触摸PDF view 执行的一些事件
ReaderView.java
1。点击屏幕中央:
2.点击屏幕左边或者右边:
2016年2月29日16:05:53
先实现 绘制页面,添加几个按钮:前进,撤销,颜色选择;
实现结果就是在相应模式下面点击新增按钮实现不同的效果
一、实现绘制回退功能
需求:点击画笔之后绘制一笔后,点击此按钮,能够撤销操作
1.
二、实现绘制前进功能(待议)
需求:在撤销操作后,点击此按钮,能够前进操作
三、实现画笔颜色选择功能
需求:选择你想要的画笔颜色,能够绘制不同颜色的笔迹
1.popuwindow
难点:目前mupdf的 绘制功能在pageview中
代码:
//注释 绘制墨迹
if (mDrawing != null) {
LogUtils.d(TAG,"paint的绘制");
Path path = new Path();
PointF p;
paint.setAntiAlias(true);
paint.setDither(true);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
paint.setStyle(Paint.Style.FILL);
paint.setStrokeWidth(INK_THICKNESS * scale);
paint