Android自定義TipView仿QQ長按后的提示窗口-創(chuàng)新互聯(lián)

自定義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è)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?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主要分兩部分,一部分是三角標,一部分是帶有圓角的主體。


當我們點擊后,三角標頂點始終在點擊位置上方一定距離(如果頂點定位在點擊位置,會導致手指擋住一部分三角,用戶體驗度不佳),并且主體不要與屏幕左右邊界碰撞,當要遮擋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://muchs.cn/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)

外貿(mào)網(wǎng)站制作