当前位置: 首页 > news >正文

化妆品网站系统规划海外网站搭建

化妆品网站系统规划,海外网站搭建,jsp做网站的书,app开发比较好的公司mupdf不支持直接的多线程.multithread.c我也没看明白,android直接调用多线程就会莫名其妙的事,要么崩溃,要么渲染出的页面不对. pdfium倒是可以直接多线程.但是解码速度要慢不少. 解码优化 解码优化有好多方面可以做; 队列优化,把当前显示中间的项,优先进行解码. 如果有缩略…mupdf不支持直接的多线程.multithread.c我也没看明白,android直接调用多线程就会莫名其妙的事,要么崩溃,要么渲染出的页面不对. pdfium倒是可以直接多线程.但是解码速度要慢不少. 解码优化 解码优化有好多方面可以做; 队列优化,把当前显示中间的项,优先进行解码. 如果有缩略图,要优化解码. 解码前判断是否可见,因为队列是单线程的,当轮到它解码时,可能页面已经滑动过去 队列优化 用recyclerview实现的页面,不需要这么复杂,直接切边,然后解码页面,甚至不需要缩略图,滑动起来效果还是不错的,前提是把额外空间设置一个页面的高度,利用它的预加载能力. recyelerview已经处理了页面的布局,可见性,回收,预加载等操作,而自定义的view是没有这些的. 定义两个队列,一个是解码缩略图的.另一个解码具体node的. private final LinkedHashMapString, DecodeTask nodeTasks = new LinkedHashMap(32, 0.75f, false); private final LinkedHashMapString, DecodeTask pageTasks = new LinkedHashMap(32, 0.75f, false);使用handlerthread来处理,因为单线程,所以也不开线程池了. 具体的消息调度: public boolean handleMessage(Message msg) {int what = msg.what;if (what == MSG_DECODE_START) {addDecodeTask(msg);} else if (what == MSG_DECODE_SELECT) {selectDecodeTask(msg);} else if (what == MSG_DECODE_CANCEL) {cancelDecodeTask(msg);}return true;} 外部调用: public void decodePage(String decodeKey, PageTreeNode node, int pageNumber, final DecodeCallback decodeCallback, float zoom, RectF pageSliceBounds, String thumbKey) {final DecodeTask decodeTask = new DecodeTask(node, pageNumber, decodeCallback, zoom, decodeKey, pageSliceBounds, thumbKey);Message message = Message.obtain();message.obj = decodeTask;message.what = MSG_DECODE_START;mHandler.sendMessage(message);} 这样就把任务添加进队列了.然后就是队列的循环去判断是否有缩略图的任务 添加任务的方法比较简单,就是判断有没有任务在. private void addDecodeTask(Message msg) {final DecodeTask decodeTask = (DecodeTask) msg.obj;if (decodeTask.type == DecodeTask.TYPE_PAGE) {DecodeTask old = pageTasks.put(decodeTask.thumbKey, decodeTask);if (old != null) {Log.d(TAG, String.format("old page task:%s-%s", pageTasks.size(), old));}} else {DecodeTask old = nodeTasks.put(decodeTask.decodeKey, decodeTask);if (old != null) {Log.d(TAG, String.format("old node task:%s-%s", nodeTasks.size(), old));}}mHandler.sendEmptyMessage(MSG_DECODE_SELECT);} 选任务: private void selectDecodeTask(Message msg) {if (isRecycled) {return;}DecodeTask selectTask = null;if (!pageTasks.isEmpty()) {selectTask = pageTasks.entrySet().iterator().next().getValue();pageTasks.remove(selectTask.thumbKey);}if (selectTask == null) {if (!nodeTasks.isEmpty()) {selectTask = nodeTasks.entrySet().iterator().next().getValue();nodeTasks.remove(selectTask.decodeKey);}}if (selectTask == null) {//mHandler.sendEmptyMessageDelayed(MSG_DECODE_SELECT, 5000L);Log.d(TAG, String.format("no task:%s-%s", pageTasks.size(), nodeTasks.size()));} else {Log.d(TAG, String.format("add task:%s-%s", selectTask.pageNumber, selectTask.type));try {performDecode(selectTask);} catch (IOException e) {Log.e(TAG, String.format("decode error:%s-%s", selectTask.pageNumber, selectTask.node));} finally {mHandler.sendEmptyMessage(MSG_DECODE_SELECT);}}} 先判断缩略图的队列,如果不为空,则运行它,如果为空,判断node队列.最后都要发消息去进行下一轮选择. 原来的任务是否死亡的判断就要修改了: private boolean isTaskDead(DecodeTask task) {boolean isPage = false;if (task.node == null) {isPage = true;}if (skipInvisible(task, isPage)) {return true;}return false;} 缩略图优化 涉及到体验,如果图片未解码,显示的是黑白色,看画布的颜色了.这体验是不好的. 所以优先设置一张缩略图,然后把这图先放上去,每一块解码时,把这些填充上,就会有一个渐变的过程,从模糊到清晰的过程,这种体验比较好.尤其在缩放值比较大的时候.比如放大3倍了.滑动的时候,每一块解码耗时都不小. 设置缩略图.就要先解析缩略图. 所以当node进行解码时,先判断有没有缩略图.没有的话,先解码缩略图.然后放入缓存中,再画出来.在vudroid的page中去画.pagetreenode中的decode,添加进参数.缩略图的key生成一个与page相关的唯一值. 绘制缩略图 protected String getKey() { return String.format("%s-%s", index, documentView.decodeService); } 这时的draw就要修改了 public void draw(Canvas canvas) {if (!isVisible()) {return;}//canvas.drawRect(bounds, fillPaint);Bitmap thumb = BitmapCache.getInstance().getBitmap(getKey());Log.d("", String.format("index:%s,%s, %s", index, getKey(), thumb));if (null != thumb) {Rect src = new Rect(0, 0, thumb.getWidth(), thumb.getHeight());Rect dst = new Rect((int) bounds.left, (int) bounds.top, (int) bounds.right, (int) bounds.bottom);canvas.drawBitmap(thumb, src, dst, null);} else {canvas.drawText("Page:" + (index + 1), bounds.centerX(), bounds.centerY(), textPaint);}node.draw(canvas);canvas.drawLine(bounds.left, bounds.bottom, bounds.right / 5, bounds.bottom, strokePaint);drawPageLinks(canvas);} 把小图画到大的范围,drawbitmap 通常有两种方法,一种是matrix,一种就是drawbitmap(bmp,src,dst,paint) src取bitmap的大小生成一个框,dst就是目标的区域.这里使用的是第二种画法,比较简单.如果高宽比不对,图片会变形.
http://www.zqtcl.cn/news/663061/

相关文章:

  • 青岛做网站皆赴青岛博采wordpress怎么改密码忘记
  • 深圳最好的网站建设广西论坛网站建设
  • html5网站设计网站建设 广西
  • 顺德手机网站设计价位网站开发学习流程图
  • 班级网站设计合肥蜀山网站开发
  • 杭州网站建设培训ck播放器整合WordPress
  • 网站建设是什么软件品牌策划公司哪家好推荐
  • 网站转跳怎么做餐饮vi设计
  • 刘连康seo培训哪家强网站优化推广平台
  • 网站推广内容滁州做网站的
  • 黄山做网站公司山东省住房和城乡建设厅举报电话
  • 中医科网站建设素材上海文明城市建设网站
  • html课程教学网站模板手机微信小程序开发教程
  • 用电脑做兼职的网站比较好食品网站建设网站定制开发
  • 网站开发 加密保护小程序制作开发进度表
  • 深圳坪山站外贸展示型网站建设
  • 手机端自定义做链接网站济南网站制作方案
  • 软件网站是怎么做的帮别人做网站赚多少钱
  • 纯静态网站 搜索功能佛山网站建设 奇锐科技
  • 四川省建设厅官方网站联系电话自己网站做虚拟币违法吗
  • 同城招聘网站自助建站2014 网站建设
  • 个人网站空间大小江油官方网站建设
  • 怎样建网站做什么网站能吸引流量
  • 做vi设计的网站网络营销推广思路
  • 简述网站设计流程沁水做网站
  • 南京公司网站建设怎么收费获奖网页设计
  • 网站域名试用期水墨风格网站源码
  • 长沙网站开长沙手机网站建设哪些内容
  • 网站建设算固定资产吗做泵阀生意到哪个网站
  • 佛山网站建设定制杭州人防质监站网址