badgeview實現:public class badgeview extends textview-->本質是textview (badgetview:徽章,獎章)
使用 view target = findviewbyid(r.id.target_view);
badgeview badge = new badgeview(this, target);
badge.settext("1"); // textview自帶的方法
badge.show();
原始碼分析:
1.入口1 badgeview badge = new badgeview(this, target);
public badgeview(context context, view target)
public badgeview(context context, attributeset attrs, int defstyle, view target, int tabindex)
private void init(context context, view target, int tabindex)
/*實現核心:
找到目標控制項target,將該控制項從其父控制項中移除,並且新增乙個新控制項framelayout(這個控制項新增原來目標控制項和新增當前控制項badgeview)
*/layoutparams lp = target.getlayoutparams();
viewparent parent = target.getparent(); // 找到目標控制項的父控制項
framelayout container = new framelayout(context);
// todo verify that parent is indeed a viewgroup
viewgroup group = (viewgroup) parent;
int index = group.indexofchild(target);
group.removeview(target);
group.addview(container, index, lp);
container.addview(target);
this.setvisibility(view.gone); // 預設情況badgetview是不可見
container.addview(this);
group.invalidate(); // 重新整理顯示
}入口2:badge.show();
public void show()
private void show(boolean animate, animation anim)
this.setvisibility(view.visible); // 使badgetview可見,預設情況是不可見(構造的時候設定為gone)
isshown = true;
}總結:
1.bageview實現原理:把原本target去除掉,然後對target進行包裝成framelayout,並新增到target原本位置中
1.1 找到target的parent
1.2 獲取target在其parent中的位置,並把target從其對應的parent中移除掉
1.3 建立乙個framelayout把target和badgetview新增到framelayout
1.4 把framelayout新增到1.2步驟刪除掉target的位置上去(這樣原本target就好像沒被刪除一樣)
2.實現的思路2:
類似之前imageview的適配任何尺寸的寬高(谷歌應用市場),把要設定badgetview的target外巢狀乙個framelayout,然後通過
在framelayout中新增badgetview這個控制項,來實現類似功能
Cartographer原始碼篇 原始碼分析 1
在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...
ThreadLocal實現原理與原始碼分析
threadlocal底層實現內部類 threadlocalmap 一 threadlocal的set方法原始碼分析 1 public void set t value thread t thread.currentthread threadlocalmap map getmap t if map ...
AbstractListView原始碼分析3
normal list that does not indicate choices public static final int choice mode none 0 the list allows up to one choice public static final int choice ...