Android 帶箭頭的指引tipLayout實(shí)現(xiàn)示例代碼
本文介紹了Android 帶箭頭的指引tipLayout實(shí)現(xiàn)示例代碼,分享給大家,具體如下:
如上是從UI接過(guò)來(lái)的設(shè)計(jì)圖,要求三角形指示器需要?jiǎng)討B(tài)對(duì)齊上面的文本,需要?jiǎng)討B(tài)的實(shí)現(xiàn)對(duì)其三角形。
引用方式
compile 'com.xiaowei:TriangleTipLayout:1.0.0'
實(shí)現(xiàn)思路
準(zhǔn)備一個(gè)三角形指引的圖片即可。
先上代碼
final TextPaint textPaint = mTextView.getPaint(); final int textHeight = (int) (textPaint.descent() - textPaint.ascent()); mRect.set(0, DEFAULT_TOP_HEIGHT, getWidth(), getHeight() + textHeight - DEFAULT_TOP_HEIGHT); canvas.drawRect(mRect, mRectPaint); final String text = mTextView.getText().toString(); float left = 0; if (mIsShowTriangle) { if (mGravity == Gravity.LEFT || mGravity == Gravity.START) { LayoutParams layoutParams = (LayoutParams) mTarget.getLayoutParams(); left = mTarget.getLeft() - layoutParams.rightMargin - layoutParams.leftMargin; } else { if (mTarget instanceof TextView) { ViewParent viewParent = mTarget.getParent(); float textWidth = textPaint.measureText(text); if (viewParent instanceof LinearLayout) { final float width = mTarget.getWidth() / 2; left = mTarget.getLeft() + width - (mBitmap.getWidth() / 2); } else if (viewParent instanceof RelativeLayout) { left = mTarget.getLeft() + textWidth / 2; } } else if (mTarget instanceof ImageView) { final float width = mTarget.getWidth(); left = mTarget.getLeft() + (width / 2) - (mBitmap.getWidth() / 2); } } canvas.drawBitmap(mBitmap, left, 0, mBitmapPaint); } }
核心代碼如上,其思路是先繪制一個(gè)矩形,預(yù)留出三角形所需要的高度,最后將其三行圖片繪制出來(lái)。
配置指示器
mTipsLayout.setRectBackgroundColor(Color.parseColor("#FFF8BE")); mTipsLayout.setTextColor(Color.parseColor("#FF9B33")); mTipsLayout.setTriangleBitmap(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_triangle_arrow)); mTipsLayout.setTriangleGravity(Gravity.START); mTipsLayout.bindView(findViewById(R.id.text2)); mTipsLayout.setText("您今日收入已到達(dá)10W+,牛逼。保持努力");
注意:當(dāng)調(diào)用setText之后會(huì)invalidate()重新繪制;
實(shí)現(xiàn)效果如下
github: 源碼
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Android RollPagerView實(shí)現(xiàn)輪播圖
這篇文章主要介紹了Android RollPagerView實(shí)現(xiàn)輪播圖的相關(guān)資料,這里提供實(shí)例來(lái)實(shí)現(xiàn)輪播圖的簡(jiǎn)單實(shí)例,希望能幫助到大家,需要的朋友可以參考下2017-08-08Android開(kāi)發(fā)中簡(jiǎn)單設(shè)置啟動(dòng)界面的方法
這篇文章主要介紹了Android開(kāi)發(fā)中簡(jiǎn)單設(shè)置啟動(dòng)界面的方法,涉及Android界面布局、加載、跳轉(zhuǎn)等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01Android自定義View實(shí)現(xiàn)葉子飄動(dòng)旋轉(zhuǎn)效果(四)
這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)葉子飄動(dòng)旋轉(zhuǎn)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Flutter實(shí)現(xiàn)頁(yè)面路由及404路由攔截
這篇文章介紹了Flutter實(shí)現(xiàn)頁(yè)面路由及404路由攔截的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-11-11Android自定義ViewGroup實(shí)現(xiàn)彈性滑動(dòng)效果
這篇文章主要為大家詳細(xì)介紹了Android自定義ViewGroup實(shí)現(xiàn)彈性滑動(dòng)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android開(kāi)發(fā)騰訊驗(yàn)證碼遇到的坑
這篇文章主要介紹了Android開(kāi)發(fā)騰訊驗(yàn)證碼遇到的坑,需要的朋友可以參考下2017-12-12