美文网首页程序员
深入剖析锤子onestep代码实现 - 上篇

深入剖析锤子onestep代码实现 - 上篇

作者: YY17 | 来源:发表于2017-03-06 21:35 被阅读0次

    OneStep的四大功能

    • 自身设置
      设置(添删图标,图标排序),onestep模式进入、退出
    • 应用切换
      启动、切换应用,包括联系人图标,直达联系人对话页面
    • 拖拽分享
      拖拽图片、文字到侧边栏图标,然后分享到侧边栏的应用或联系人,
      例如,包括最近文档中的图片、文件、剪贴板文字,其它应用只要能发起拖拽事件,类型符合也可以。
    • 最近文档
      操作最近的图片、文件、剪贴板

    注: 区分下长按拖动与拖拽分享
    长按拖动是指长按侧边栏图标时,拖动图标排序,拖拽分享,是在其它界面长按视图控件,如图片,产生系统级的拖拽事件,然后把其拖拽到侧边栏分享。

    项目结构

    初始一看以为,按MVC分层来放相关的类文件,其实不是,其实没有,就是简单归了下类。

    \smartisan\packages_apps_OneStep
    │ Android.mk
    │ AndroidManifest.xml
    ├─assets
    │ └─calendar
    ├─res
    │ ├─drawable
    │ ├─layout
    │ ├─values
    │ └─...
    └─src
    └─com
    └─smartisanos
    └─sidebar ------一些无家可归的孩子,有些未被归类
    │ DingDingReceiver.java
    │ PackagesMonitor.java
    │ PendingDragEventTask.java
    │ ReceiveShareData.java
    │ SelectContactActivity.java
    │ SelectMailContactActivity.java
    │ SidebarApplication.java
    │ SidebarController.java
    │ SidebarMode.java
    │ SidebarService.java
    │ SidebarStatus.java
    ├─action
    ├─receiver
    ├─setting ---------- 设置界面相关的主要代码
    ├─util ---------- 数据层的类,都在此
    │ │ AppItem.java
    │ │ AppManager.java
    │ │ BitmapCache.java
    │ │ Constants.java
    │ │ ContactItem.java
    │ │ DataManager.java
    │ │ FileInfo.java
    │ │ IClear.java
    │ │ ImageLoader.java
    │ │ LOG.java
    │ │ RecentFileManager.java
    │ │ ResolveInfoGroup.java
    │ │ ResolveInfoManager.java
    │ │ SidebarItem.java
    │ │ Utils.java
    │ │ WechatContact.java
    │ │ ...
    │ ├─anim
    │ └─net
    ├─view ------------------View层的视图类,基本都在此,但其实Adapter类也都丢在这了
    │ ClipboardAdapter.java
    │ ClipboardItemView.java
    │ ClipboardViewGroup.java
    │ ContentView.java
    │ RecentPhotoAdapter.java
    │ RecentPhotoViewGroup.java
    │ SidebarAdapter.java
    │ SidebarListView.java
    │ SidebarRootView.java
    │ SideView.java
    │ TopItemView.java
    │ TopView.java
    └─ ...

    视图框架及layout文件

    还是比较容易找到入口类,SidebarController.init()函数里添加三个系统层级的窗口视图,很好理解,分别对应下图中的顶层栏(红),侧边栏(蓝),内容视图(橙)。

    onestep_all.jpg

    从layout文件来看,是这样的视图层级关系
    层级关系靠自定义的视图容器构成。

    • 顶层栏,容纳三个按钮
      --> topbar_view.xml
      <com.smartisanos.sidebar.view.TopView
      <include layout="@layout/top_item_view"
      android:id="@+id/photo"/>
      <include layout="@layout/top_item_view"
      android:id="@+id/file"/>
      <include layout="@layout/top_item_view"
      android:id="@+id/clipboard"/>
      </com.smartisanos.sidebar.view.TopView>

    • 侧边栏,容纳应用、联系人、分享目标列表
      --> sidebar_view.xml
      <com.smartisanos.sidebar.view.SidebarRootView //侧边栏根视图

        <com.smartisanos.sidebar.view.SideView //侧边栏视图容器,容纳了以下两个子视图,分别用于正常时显示,拖拽分享状态时的显示和操作
      
        <com.smartisanos.sidebar.view.DragScrollView //侧边栏视图容器控件,支持滚动和拖动子控件
            android:id="@+id/side_view_dragged"  //侧边栏处于拖拽分享时显示
            <com.smartisanos.sidebar.view.SidebarListView
                android:id="@+id/ongoinglist_fake"
            <com.smartisanos.sidebar.view.SidebarListView
                android:id="@+id/contactlist_fake"
            <com.smartisanos.sidebar.view.SidebarListView
                android:id="@+id/sharelist"
      
        <com.smartisanos.sidebar.view.DragScrollView //侧边栏视图容器控件,支持滚动和拖动子控件
            android:id="@+id/sideview_scroll_list_normal" //侧边栏正常状态下显示
            <com.smartisanos.sidebar.view.SidebarListView
                android:id="@+id/ongoinglist"
            <com.smartisanos.sidebar.view.SidebarListView
                android:id="@+id/contactlist"
            <com.smartisanos.sidebar.view.SidebarListView
                android:id="@+id/applist"
      </com.smartisanos.sidebar.view.SidebarRootView>
      
    • 内容视图,容纳最近图片、文件、剪贴板内容视图
      --> content_view.xml
      <com.smartisanos.sidebar.view.ContentView

      <include layout="@layout/photo_view_group"
      <com.smartisanos.sidebar.view.RecentPhotoViewGroup

          <include layout="@layout/file_view_group"
            <com.smartisanos.sidebar.view.RecentFileViewGroup
      
          <include layout="@layout/clipboard_view_group"
            <com.smartisanos.sidebar.view.ClipboardViewGroup
      
          <include layout="@layout/bookmark_view_group" //这个暂时没用到
            <com.smartisanos.sidebar.view.BookmarkViewGroup
      </com.smartisanos.sidebar.view.ContentView>
      

    layout文件

    同上

    视图树

    暂留空

    相关文章

      网友评论

        本文标题:深入剖析锤子onestep代码实现 - 上篇

        本文链接:https://www.haomeiwen.com/subject/fjougttx.html