Folder文件夹的排布
来源:互联网 发布:win10网络发现已关闭 编辑:程序博客网 时间:2024/04/28 06:38
基于原生态 launcher3的5.1源代码进行分析。
- 通过Hierachy view工具,我们知道,Folder布局是在FolderIcon这个文件中进行的,dispatchDraw()这个是关键的地方,在这里我们先打一个log堆栈出来分析下。
java.lang.Throwable at com.android.launcher3.FolderIcon.computePreviewItemDrawingParams(FolderIcon.java:564) at com.android.launcher3.FolderIcon.dispatchDraw(FolderIcon.java:645) at android.view.View.updateDisplayListIfDirty(View.java:14177) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at com.android.launcher3.ShortcutAndWidgetContainer.dispatchDraw(ShortcutAndWidgetContainer.java:93) at android.view.View.updateDisplayListIfDirty(View.java:14177) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at com.android.launcher3.CellLayout.dispatchDraw(CellLayout.java:518) at android.view.View.draw(View.java:15249) at android.view.View.updateDisplayListIfDirty(View.java:14182) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at com.android.launcher3.PagedView.dispatchDraw(PagedView.java:1339) at android.view.View.draw(View.java:15249) at android.view.View.updateDisplayListIfDirty(View.java:14182) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at com.android.launcher3.DragLayer.drawChild(DragLayer.java:949) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at com.android.launcher3.DragLayer.dispatchDraw(DragLayer.java:915) at android.view.View.updateDisplayListIfDirty(View.java:14177) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at android.view.View.draw(View.java:15249) at android.widget.FrameLayout.draw(FrameLayout.java:598) at android.view.View.updateDisplayListIfDirty(View.java:14182) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at android.view.View.updateDisplayListIfDirty(View.java:14177) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at android.view.View.updateDisplayListIfDirty(View.java:14177) at android.view.View.getDisplayList(View.java:14204) at android.view.View.draw(View.java:14974) at android.view.ViewGroup.drawChild(ViewGroup.java:3457) at android.view.ViewGroup.dispatchDraw(ViewGroup.java:3244) at android.view.View.draw(View.java:15249) at android.widget.FrameLayout.draw(FrameLayout.java:598) at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2667) at android.view.View.updateDisplayListIfDirty(View.java:14182) at android.view.View.getDisplayList(View.java:14204) at android.view.ThreadedRenderer.updateViewTreeDisplayList(ThreadedRenderer.java:273) at android.view.ThreadedRenderer.updateRootDisplayList(ThreadedRenderer.java:279) at android.view.ThreadedRenderer.draw(ThreadedRenderer.java:318) at android.view.ViewRootImpl.draw(ViewRootImpl.java:2530) at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2352) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1982) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1061) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5895) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:767) at android.view.Choreographer.doCallbacks(Choreographer.java:580) at android.view.Choreographer.doFrame(Choreographer.java:550) at android.view.Choreographer$Frame
- 我们来分析pcomputePreviewDrawingParams()
在这里进行一些layout前的各个数据的初始化的一个过程。
private void computePreviewDrawingParams(int drawableSize, int totalSize) {}
所现实的三个小图片大小 :mIntrinsicIconSize=72 ;
Folder文件夹所占用的空间 :mTotalWidth=117 ;
圆形的背景图片大小 :previewSize=90 ;
x坐标 :params.transX = transX;
y坐标 :params.transY = transY;
显示的图标要缩小的比例 :params.scale = totalScale;
params.overlayAlpha = overlayAlpha;
previewPadding=6 ;
mAvailableSpaceInPreview=78 ;
adjustedAvailableSpace=70 ;
unscaledHeight=84 ;
mBaselineIconScale=0.8333333 ;
mBaselineIconSize=60 ;
mMaxPerspectiveShift=10.8
//
3. view的绘制过程
A. draw()
B. onDraw()
C. dispatchDraw()
- Folder文件夹的排布
- Eclipse-source folder文件夹和folder文件夹的区别
- source folder 资源文件夹 和 folder 普通文件夹的 区别
- Matlab------------Current Folder的默认文件夹
- 一般视图的排布
- Xcode folder(蓝色文件夹) 和 group(黄色文件夹)的区别
- 文件夹浏览--Folder
- Eclipse中普通文件夹与java包的转换(package,source folder,folder)
- 控件的几何排布---QT
- xCode工程的文件夹类型 folder References group
- 使用virtualbox时的共享文件夹(shared folder) 问题
- xCode工程的文件夹类型 folder References group
- xCode工程的文件夹类型 folder References group
- 使用item获取item所在的文件夹(folder)
- xcode工程的文件夹类型 folder References group
- oracle 制作具有文件夹(folder)功能的form
- 复制文件/文件夹以及子文件夹下的文件; Copy file/folder including subfolder/files
- vmware 共享文件夹(share folder)
- 使用jquery的sortable插件实现拖动效果,以及影响blur事件触发的解决方法
- 用Redis实现分布式锁 与 实现任务队列
- maven POM.xml 标签详解
- poj 3126.Prime Path(bfs)
- 产生短信验证码
- Folder文件夹的排布
- HierarchyViewer布局优化工具
- 用js 动态的更改类名为 ".correctControl" div 的 背景色
- git 删除远程分支
- WinDbg学习笔记
- [Java代码] JDBC分页工具类
- js中return false,return,return true的用法及区别
- $('<span class="test">')在ie8不生效
- 将float型数据存储到EEPROM中或者flash中的方法