自定義view--TipView
創(chuàng)新互聯(lián)建站是一家集網(wǎng)站建設(shè),西工企業(yè)網(wǎng)站建設(shè),西工品牌網(wǎng)站建設(shè),網(wǎng)站定制,西工網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,西工網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。TipView其實就是類似QQ長按消息彈出來的橫放的提示框。
通過看書和參考各位大神的博客(再次對大神表示恭敬),我用了一下午時間寫完了這么一個view。
先來看圖:
1 自定義TipView思路
1 首先我們考慮是繼承View還是ViewGroup
其實TipView直觀看更像是一個group,里面有子view。但其實我們并不需要繼承ViewGroup,因為我們不用像LinearLayout那樣在布局文件里面去添加子view,而且TipView的item我們用文字就好。如果繼承于Group我們還要考慮onLayout的問題,為了簡單我直接繼承自View。
2 重寫方法
TipView要像PopupWindow、Dialog一樣顯示在Activity上而不是添加到父容器中,原因是如果創(chuàng)建后添加到父容器中去托管的話,父容器的布局規(guī)則會影響我們TipView的顯示效果。所以我們要使用WindowManager來把TipView添加到外層布局,并且要充滿屏幕,i原因為我們要點擊tem之外的地方使TipView消失。所以view大小是固定充滿屏幕的,不需要重寫onMeasure。
需要重寫onDraw來繪制view。
3 顯示位置
TipView主要分兩部分,一部分是三角標,一部分是帶有圓角的主體。
當我們點擊后,三角標頂點始終在點擊位置上方一定距離(如果頂點定位在點擊位置,會導(dǎo)致手指擋住一部分三角,用戶體驗度不佳),并且主體不要與屏幕左右邊界碰撞,當要遮擋ToolBar時向下繪制。
2 定義變量
public static final int TOP = 0;//從點擊位置上面繪制 public static final int DOWN = 1;//...下面... private int mItemWidth;//item寬 private int mItemHeight;//item高 private int mTriaHeight;//三角的高度 private int mHalfTriaWidth;//三角的半寬 private int mTriaAcme;//三角的頂點 private int mTriaItemBorder;//三角的頂點 private int realLeft;//窗口距左邊的值 private int marginSide;//窗口距左右邊的值,防止出現(xiàn)的窗口緊貼邊界 private int mSeparateLineColor = Color.WHITE; private int mTextSize;//選項文字的大小 private int mTextColor;//選項文字的顏色 private int mItemSeparation;//分割線寬度; private int mRadius;//圓角 private List<TextItem> items;//存放item的集合 private List<Rect> mItemRectList = new ArrayList<>(); // 存儲每個方塊 private Paint mPaint;//畫筆 private Paint mSeparationPaint;//分割線畫筆 private Paint mSPaint;//三角的畫筆 private Path mPath;//路徑 private int x, y;//點擊的位置 private ViewGroup viewRoot;//父容器 private int location = TOP;//繪制位置 private int choose = -1;//點擊的item private int mToolbarBottom;//Toolbar下邊距屏幕上距離 private WindowManager windowManager; private WindowManager.LayoutParams layoutParams;//windowManger布局管理器,為了像Dialog一樣在Activity彈出,而不是依附于某個group private onItemCilckLinener itemCilckLinener; private Context context = null;
文章標題:Android自定義TipView仿QQ長按后的提示窗口-創(chuàng)新互聯(lián)
標題URL:http://jinyejixie.com/article36/dcjisg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動網(wǎng)站建設(shè)、網(wǎng)站維護、外貿(mào)網(wǎng)站建設(shè)、微信小程序、服務(wù)器托管、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容