鍩轰簬Android鎵嬫満鐢靛瓙涔﹂槄璇诲櫒鐨勮璁′笌瀹炵幇姣曚笟璁捐 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期四 文章鍩轰簬Android鎵嬫満鐢靛瓙涔﹂槄璇诲櫒鐨勮璁′笌瀹炵幇姣曚笟璁捐 - 鐧惧害鏂囧簱更新完毕开始阅读e3cee3ca29ea81c758f5f61fb7360b4c2e3f2a38

3.5阅读管理模块功能描述

图16所示是电子书阅读主要页面,本页面通过自定义一个View视图来显示书页,通过自定义类来读取文本内容并通过onDraw()方法把文件名、文本内容、电量信息、时间信息和已读百分比进行绘制成图片,并通过View来把绘制的图片显示出来。第一次进入阅读页面是会有显示引导页面来指导用户如何读本页面进行操作如图17所示。本页面操作包括点击事件和滑动事件,点击左侧屏幕进行向上翻页,点击右侧屏幕进行向下翻页,点击屏幕中间画出菜单选项如图18所示。

图16 阅读引导界面 图17 阅读引导页面 图18 阅读菜单

此菜单是使用PopupWindow组件实现,菜单分上下两部分,上面的菜单有返回按钮、屏幕亮度调节按钮和添加书签按钮;下面的菜单有主题选择按钮、搜索按钮、书签按钮、目录按钮、字体大小调节按钮、翻页方式按钮、夜间模式切换按钮和退出软件按钮。点击主题选择按钮弹出主题选择窗口如图19所示,此选项共设置了9种主题供用户选择,当用户选择了主题阅读页面会自动改变为当前选择的主题样式;点击屏幕亮度调节按钮弹出屏幕亮度设置窗口如图20所示,拖动屏幕亮度调节条屏幕亮度会随着用户的拖动而即时改变;点击翻页方式按钮弹出翻页方式设置窗口如图21所示,此设置中共有三个按钮代表了三种翻页方式。

图19 阅读主题选择 图20 屏幕亮度设置 图21 翻页方式设置

第一次进入阅读界面显示引导页面的核心代码实现为: if(share.getBoolean(\ firstDialog(); edit.putBoolean(\false); edit.commit(); }

实现休息提醒和空闲退出代码: @SuppressLint(\

Handler mTimeHandler = new Handler() {

public void handleMessage(Message msg) { if (msg.what == 1) { xiuxiDialog(); } if (msg.what == 2) { SysApplication.getInstance().exit(); } super.handleMessage(msg); }; };

对应屏幕事件处理的核心代码实现为: @Override

public boolean onTouch(View v, MotionEvent e) { mKXcont = 0;

if (e.getAction() == MotionEvent.ACTION_DOWN) { //手指按下时 xd = e.getX();

yd = e.getY(); if (yd > mHeightPixels * 0.35 && yd < mHeightPixels * 0.65 && xd > mWidthPixels * 0.25 && xd < mWidthPixels * 0.75) { bool = false; } else { bool = true; } if (pagefactory.isReadEnd() && xd > mWidthPixels / 2 && bool){ Toast.makeText(ReaderActivity.this, \已经到最后一页了~\ Toast.LENGTH_SHORT).show(); }

} else if (e.getAction() == MotionEvent.ACTION_MOVE) {//移动时 x = e.getX(); y = e.getY(); if (Math.abs(xd - x) > 10 || Math.abs(yd - y) > 10) bool = true;

} else if (e.getAction() == MotionEvent.ACTION_UP) { //离开屏幕时 xu = e.getX(); yu = e.getY(); if (!bool && Math.abs(xd - xu) < 10 && Math.abs(yd - yu) < 10) { popupWindow.showAtLocation(mPageWidget, 0, 0, 0); } }

if (bool) { boolean ret = false; if (v == mPageWidget) { if (e.getAction() == MotionEvent.ACTION_DOWN) { mPageWidget.calcCornerXY(e.getX(), e.getY()); pagefactory.onDraw(mCurPageCanvas); if (mPageWidget.DragToRight()) { try { pagefactory.prePage(); } catch (IOException e1) { e1.printStackTrace(); } if (pagefactory.isfirstPage()){ return false; } pagefactory.onDraw(mNextPageCanvas); } else { try { pagefactory.nextPage(); } catch (IOException e1) { e1.printStackTrace();

}

} if (pagefactory.islastPage()){ return false; } pagefactory.onDraw(mNextPageCanvas); } pos = pagefactory.getBugBegin(); booksTable.updata(bookId, pos, pagefactory.getFPercent()); mPageWidget.setBitmaps(mCurPageBitmap, mNextPageBitmap); } ret = mPageWidget.doTouchEvent(e); return ret; } }

return true;

设置窗口代码实现(此处以字体大小调节设置窗口为例): private void fontSizeDialog() {

View myInputView = LayoutInflater.from(this).inflate( R.layout.input_dialog, null); dialog = new Dialog(this, R.style.Dialog); dialog.setContentView(myInputView);

TextView title = (TextView) myInputView.findViewById(R.id.title); seekbarText = (TextView) myInputView .findViewById(R.id.seekbar_text); SeekBar seekbar = (SeekBar) myInputView .findViewById(R.id.seekBar1); seekbarText.setVisibility(View.VISIBLE); seekbar.setVisibility(View.VISIBLE); int size = share.getInt(\

seekbarText.setText(\当前字体大小:\ seekbar.setProgress(size - 10);

Button confirm = (Button) myInputView .findViewById(R.id.confirm_button); Button cancel = (Button) myInputView .findViewById(R.id.cancel_button); cancel.setVisibility(View.GONE);

seekbar.setOnSeekBarChangeListener(new MyOnSeekBarChangeListener()); confirm.setOnClickListener(new OnClickListener() { @Override