色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發(fā)燒友App

硬聲App

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
电子发烧友
开通电子发烧友VIP会员 尊享10大特权
海量资料免费下载
精品直播免费看
优质内容免费畅学
课程9折专享价
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示
創(chuàng)作
電子發(fā)燒友網(wǎng)>電子資料下載>電子資料>ThinkMap Android簡易思維導(dǎo)圖控件

ThinkMap Android簡易思維導(dǎo)圖控件

2022-05-20 | zip | 0.59 MB | 次下載 | 2積分

資料介紹

授權(quán)協(xié)議 GPL
開發(fā)語言 Kotlin Java
軟件類型 開源軟件
所屬分類 手機(jī)/移動開發(fā)、 Android UI 組件

軟件簡介

實(shí)現(xiàn)Android端的簡易思維導(dǎo)圖。可以保存數(shù)據(jù)。編輯樹形圖。

poYBAGJ2P_mATIRPAAKrZeFgCtQ448.png

建立模型

主要模型結(jié)構(gòu)相對簡單:TreeModel,NoteModel,NoteView,TreeView。

核心實(shí)現(xiàn)分布如下:

  • TreeModel:樹形結(jié)構(gòu)的存儲,樹形結(jié)構(gòu)的遍歷,添加、刪除節(jié)點(diǎn);

  • NoteModel:節(jié)點(diǎn)關(guān)聯(lián)的指向,和Parent的指向;

  • TreeView :繪制樹形結(jié)構(gòu),對樹形結(jié)構(gòu)位置的糾正,實(shí)現(xiàn)View層的添加,刪除,note關(guān)聯(lián)繪制;

  • NoteView:顯示text;

?

編寫位置計(jì)算核心代碼

在核心代碼中,我想和大家分享的是TreeView如何對多種Style(樹形形狀)進(jìn)行適配的問題。因?yàn)槲覀兊臉湫谓Y(jié)構(gòu)的表達(dá)多種的,有的是一個半樹形圖,有點(diǎn)是圓形展開的等。對于這個問題,作為程序員如何進(jìn)行解耦能,采用Interface進(jìn)行解構(gòu)適配,統(tǒng)一行為。所以在這里我寫了一個TreeLayoutManager進(jìn)行管理樹形的位置表達(dá)。這里我實(shí)現(xiàn)了一個RightTreeLayoutManager。代碼概況如下:

接口

public?interface?TreeLayoutManager?{
????/**
?????*?進(jìn)行樹形結(jié)構(gòu)的位置計(jì)算
?????*/
????void?onTreeLayout(TreeView?treeView);
????/**
?????*?位置分布好后的回調(diào),用于確認(rèn)ViewGroup的大小
?????*/
????ViewBox?onTreeLayoutCallBack();
????/**
?????*?修正位置
?????*
?????*?@param?treeView
?????*?@param?next
?????*/
????void?correctLayout(TreeView?treeView,?NodeView?next);
}

?

實(shí)現(xiàn)

public?class?RightTreeLayoutManager?implements?TreeLayoutManager{
????final?int?msg_standard_layout?=?1;
????final?int?msg_correct_layout?=?2;
????final?int?msg_box_call_back?=?3;
????private?ViewBox?mViewBox;
????private?int?mDy;
????private?int?mDx;
????private?int?mHeight;
????public?RightTreeLayoutManager(int?dx,?int?dy,?int?height)?{
????????mViewBox?=?new?ViewBox();
????????this.mDx?=?dx;
????????this.mDy?=?dy;
????????this.mHeight?=?height;
????}
????@Override
????public?void?onTreeLayout(final?TreeView?treeView)?{
????????final?TreeModel?mTreeModel?=?treeView.getTreeModel();
????????if?(mTreeModel?!=?null)?{
????????????View?rootView?=?treeView.findNodeViewFromNodeModel(mTreeModel.getRootNode());
????????????if?(rootView?!=?null)?{
????????????????rootTreeViewLayout((NodeView)?rootView);
????????????}
????????????mTreeModel.addForTreeItem(new?ForTreeItem>()?{
????????????????@Override
????????????????public?void?next(int?msg,?NodeModel?next)?{
????????????????????doNext(msg,?next,?treeView);
????????????????}
????????????});
????????????//基本布局
????????????mTreeModel.ergodicTreeInWith(msg_standard_layout);
????????????//糾正
????????????mTreeModel.ergodicTreeInWith(msg_correct_layout);
????????????mViewBox.clear();
????????????mTreeModel.ergodicTreeInDeep(msg_box_call_back);
????????}
????}
????@Override
????public?ViewBox?onTreeLayoutCallBack()?{
????????if?(mViewBox?!=?null)?{
????????????return?mViewBox;
????????}?else?{
????????????return?null;
????????}
????}
????/**
?????*?布局糾正
?????*
?????*?@param?treeView
?????*?@param?next
?????*/
????public?void?correctLayout(TreeView?treeView,?NodeView?next)?{
??????????????//主要是糾正對于標(biāo)準(zhǔn)布局出現(xiàn)的錯誤,譬如,在圖片糾正中的那種情況
?????????????//糾正需要對同層的Note進(jìn)行拉伸
????}
????/**
?????*?標(biāo)準(zhǔn)分布
?????*
?????*?@param?treeView
?????*?@param?rootView
?????*/
????private?void?standardLayout(TreeView?treeView,?NodeView?rootView)?{
????????????????//標(biāo)準(zhǔn)分布主要是在基于root節(jié)點(diǎn)進(jìn)行排開
????????????????//對于奇數(shù)和偶數(shù)不同的情況進(jìn)行排開
????????????????//中間向外計(jì)算位置
????}
????/**
?????*?移動
?????*
?????*?@param?rootView
?????*?@param?dy
?????*/
????private?void?moveNodeLayout(TreeView?superTreeView,?NodeView?rootView,?int?dy)?{
????????????????//如果一個note節(jié)點(diǎn)進(jìn)行了移動,那么它
????????????????//會影響到它的子節(jié)點(diǎn)的位置。
????????????????//所以要進(jìn)行重新計(jì)算,把它的所有的Note位置進(jìn)行位移????????
????}
????/**
?????*?root節(jié)點(diǎn)的定位
?????*
?????*?@param?rootView
?????*/
????private?void?rootTreeViewLayout(NodeView?rootView)?{
????????int?lr?=?mDy;
????????int?tr?=?mHeight?/?2?-?rootView.getMeasuredHeight()?/?2;
????????int?rr?=?lr?+?rootView.getMeasuredWidth();
????????int?br?=?tr?+?rootView.getMeasuredHeight();
????????rootView.layout(lr,?tr,?rr,?br);
????}
}

?

View的連線

要實(shí)現(xiàn)對View和View的連線,只要在View的位置定了之后,就進(jìn)行畫線即可。用Sketch畫個演示如下:

pYYBAGJ2P_2AIMyBAAAtGqmqqQ8437.png

其中線為一個貝塞爾曲線。代碼如下:

????@Override
????protected?void?dispatchDraw(Canvas?canvas)?{
????????if?(mTreeModel?!=?null)?{
????????????drawTreeLine(canvas,?mTreeModel.getRootNode());
????????}
????????super.dispatchDraw(canvas);
????}
????/**
?????*?繪制樹形的連線
?????*
?????*?@param?canvas
?????*?@param?root
?????*/
????private?void?drawTreeLine(Canvas?canvas,?NodeModel?root)?{
????????NodeView?fatherView?=?(NodeView)?findNodeViewFromNodeModel(root);
????????if?(fatherView?!=?null)?{
????????????LinkedList>?childNodes?=?root.getChildNodes();
????????????for?(NodeModel?node?:?childNodes)?{
????????????????//連線
????????????????drawLineToView(canvas,?fatherView,?findNodeViewFromNodeModel(node));
????????????????//遞歸
????????????????drawTreeLine(canvas,?node);
????????????}
????????}
????}
????/**
?????*?繪制兩個View直接的連線
?????*
?????*?@param?canvas
?????*?@param?from
?????*?@param?to
?????*/
????private?void?drawLineToView(Canvas?canvas,?View?from,?View?to)?{
????????if?(to.getVisibility()?==?GONE)?{
????????????return;
????????}
????????Paint?paint?=?new?Paint();
????????paint.setAntiAlias(true);
????????paint.setStyle(Paint.Style.STROKE);
????????float?width?=?2f;
????????paint.setStrokeWidth(dp2px(mContext,?width));
????????paint.setColor(mContext.getResources().getColor(R.color.chelsea_cucumber));
????????int?top?=?from.getTop();
????????int?formY?=?top?+?from.getMeasuredHeight()?/?2;
????????int?formX?=?from.getRight();
????????int?top1?=?to.getTop();
????????int?toY?=?top1?+?to.getMeasuredHeight()?/?2;
????????int?toX?=?to.getLeft();
????????Path?path?=?new?Path();
????????path.moveTo(formX,?formY);
????????path.quadTo(toX?-?dp2px(mContext,?15),?toY,?toX,?toY);
????????canvas.drawPath(path,?paint);
????}

?

位置的糾正流程

位置糾正的問題;在對于我之前的位置的算法探索流程如下圖,關(guān)鍵是寫好已知的代碼,之后糾正。

poYBAGJ2P_-AchqiAAHJTEkaJXg611.png

poYBAGJ2QAKAYAHnAACsa_zuYyI888.png

?

pYYBAGJ2QBqAMdldAADn2M6Fx_0549.png

?

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

请按住滑块,拖动到最右边
了解新功能

查看更多

广告

下載排行

本周

  1. 1晶體三極管的電流放大作用詳細(xì)說明
  2. 0.77 MB   |  29次下載  |  2 積分
  3. 2雙極型三極管放大電路的三種基本組態(tài)的學(xué)習(xí)課件免費(fèi)下載
  4. 4.03 MB   |  23次下載  |  1 積分
  5. 3多級放大電路的學(xué)習(xí)課件免費(fèi)下載
  6. 1.81 MB   |  20次下載  |  2 積分
  7. 4PC4401_DC-DC 42V反激式隔離開關(guān)電路
  8. 0.85 MB   |  4次下載  |  免費(fèi)
  9. 5AIWA HS-J505MKⅡ維修手冊
  10. 22.63 MB   |  2次下載  |  10 積分
  11. 6GPRS智能超聲波液位監(jiān)測終端
  12. 835.55 KB  |  2次下載  |  免費(fèi)
  13. 7電磁兼容性原理與設(shè)計(jì)
  14. 6.18 MB   |  1次下載  |  3 積分
  15. 8AIWA HS-JX3000/HS-JX3000D維修手冊
  16. 14.78 MB   |  次下載  |  10 積分

本月

  1. 1晶體三極管的電流放大作用詳細(xì)說明
  2. 0.77 MB   |  29次下載  |  2 積分
  3. 2雙極型三極管放大電路的三種基本組態(tài)的學(xué)習(xí)課件免費(fèi)下載
  4. 4.03 MB   |  23次下載  |  1 積分
  5. 3第十一屆 藍(lán)橋杯 單片機(jī)設(shè)計(jì)與開發(fā)項(xiàng)目 省賽 程序設(shè)計(jì)試題及源碼
  6. 90.88KB   |  23次下載  |  3 積分
  7. 4Python從入門到精通背記手冊
  8. 18.77 MB   |  21次下載  |  1 積分
  9. 5多級放大電路的學(xué)習(xí)課件免費(fèi)下載
  10. 1.81 MB   |  20次下載  |  2 積分
  11. 6STM32F103C8T6開發(fā)板最小系統(tǒng)原理圖
  12. 0.78 MB   |  17次下載  |  免費(fèi)
  13. 7SX1308應(yīng)用電路圖與SX1308升壓電路圖
  14. 0.18 MB   |  8次下載  |  1 積分
  15. 8東芝彩色電視機(jī)29SF6C維修說明書
  16. 4.86 MB   |  8次下載  |  1 積分

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935127次下載  |  10 積分
  3. 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計(jì)
  4. 1.48MB  |  420063次下載  |  10 積分
  5. 3Altium DXP2002下載入口
  6. 未知  |  233089次下載  |  10 積分
  7. 4電路仿真軟件multisim 10.0免費(fèi)下載
  8. 340992  |  191382次下載  |  10 積分
  9. 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
  10. 158M  |  183337次下載  |  10 積分
  11. 6labview8.5下載
  12. 未知  |  81584次下載  |  10 積分
  13. 7Keil工具M(jìn)DK-Arm免費(fèi)下載
  14. 0.02 MB  |  73814次下載  |  10 積分
  15. 8LabVIEW 8.6下載
  16. 未知  |  65988次下載  |  10 積分
主站蜘蛛池模板: 亚洲国产AV无码综合在线 | 国产色综合久久无码有码 | 国产高清视频免费在线观看 | 色老板美国在线观看 | 国产区免费在线观看 | 六月婷婷国产精品综合 | 久久精品AV无码亚洲色欲 | 国产美女久久久久久久久久久 | 日韩亚洲国产欧美免费观看 | 伊人精品视频直播 | 91桃色污无限免费看 | 2020美女视频黄频大全视频 | 丝袜美女被艹 | 亚洲精品视频免费看 | 超碰超碰视频在线观看 | 国产制服丝袜91在线 | 国产一区91 | 色翁荡息又大又硬又粗又爽电影 | 国产亚洲精品福利视频 | 国产午夜AV无码无片久久96 | 欧美尤物射精集锦 | 日本人娇小hd| 亚洲av欧美在我 | 一级毛片全部免 | 99视频免费看 | 亚洲欧美免费无码专区 | 午夜福利不卡片在线播放免费 | 日本一卡2卡3卡四卡精品网站 | 成年人视频在线观看免费 | 午夜福到在线4国产 | 色狠狠色综合吹潮 | 99视频全部看免费观 | 四虎永久在线精品国产 | 欧美video巨大粗暴18 | 99热在线精品视频 | 久久99国产综合精品AV蜜桃 | 男人叼女人 | 精品含羞草免费视频观看 | 九九久久国产 | 女人精69xxxxx | 久久视频在线视频观品15 |