日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android實現(xiàn)三角形氣泡效果方式匯總

瀏覽:194日期:2022-09-20 16:56:00

在開發(fā)過程中,我們可能會經(jīng)常遇到這樣的需求樣式:

Android實現(xiàn)三角形氣泡效果方式匯總

這張圖是截取京東消息通知的彈出框,我們可以看到右上方有個三角形的氣泡效果,這只是其中一種,三角形的方向還可以是上、下、左、右。

通過截圖可以發(fā)現(xiàn),氣泡由正三角形和圓角長方形組成,于是可以通過組合來形成三角形氣泡的效果,下面我們通過三種方式進行實現(xiàn)。

實現(xiàn)方式:

1、通過.9圖進行實現(xiàn);2、通過shape方式實現(xiàn);3、通過自定義view的方式實現(xiàn);

實現(xiàn)邏輯:

1、通過.9圖進行實現(xiàn)

這種方式就不用說了吧,找你們UI小姐姐切一個.9圖,使用即可,不過這種方式的圖片需要占一定體積哦。

2、通過shape方式實現(xiàn)

正三角形

<?xml version='1.0' encoding='utf-8'?><layer-list xmlns:android='http://schemas.android.com/apk/res/android'> <item> <rotate android:fromDegrees='45' android:pivotX='-40%' android:pivotY='80%'> <shape android:shape='rectangle'><size android: android: /><solid android:color='#ffffff' /> </shape> </rotate> </item></layer-list>

倒三角形

<?xml version='1.0' encoding='utf-8'?><layer-list xmlns:android='http://schemas.android.com/apk/res/android'> <item> <rotate android:fromDegrees='45' android:pivotX='135%' android:pivotY='15%'> <shape android:shape='rectangle'><size android: android: /><solid android:color='#ffffff' /> </shape> </rotate> </item></layer-list>

左三角形

<?xml version='1.0' encoding='utf-8'?><layer-list xmlns:android='http://schemas.android.com/apk/res/android'> <item> <rotate android:fromDegrees='-45' android:pivotX='85%' android:pivotY='-35%'>> <shape android:shape='rectangle'><size android: android: /><solid android:color='#ffffff' /> </shape> </rotate> </item></layer-list>

右三角形

<?xml version='1.0' encoding='utf-8'?><layer-list xmlns:android='http://schemas.android.com/apk/res/android'> <item> <rotate android:fromDegrees='-45' android:pivotX='15%' android:pivotY='135%'>> <shape android:shape='rectangle'><size android: android: /><solid android:color='#ffffff' /> </shape> </rotate> </item></layer-list>

上面就是通過shape方式實現(xiàn)各個方向的代碼,這種方式缺點比較明顯,如果要變化不同的角的位置需要再寫不同的布局。

3、通過自定義view的方式實現(xiàn)

由于是比較簡單這里就不講解每個怎么搞了,可以復制過去直接用

添加自定義屬性

<declare-styleable name='TriangleView'> <attr name='trv_color' format='color' /> <attr name='trv_direction'> <enum name='top' value='0' /> <enum name='bottom' value='1' /> <enum name='right' value='2' /> <enum name='left' value='3' /> </attr> </declare-styleable>

自定義代碼文件

public class TriangleView extends View { private static final int TOP = 0; private static final int BOTTOM = 1; private static final int RIGHT = 2; private static final int LEFT = 3; private static final int DEFUALT_WIDTH = 10; private static final int DEFUALT_HEIGHT = 6; private static final int DEFUALT_COLOR = R.color.FFF; private Paint mPaint; private int mColor; private int mWidth; private int mHeight; private int mDirection; private Path mPath; public TriangleView(final Context context) { this(context, null); } public TriangleView(Context context, @Nullable AttributeSet attrs) { this(context, attrs, 0); } public TriangleView(final Context context, final AttributeSet attrs, final int defStyleAttr) { super(context, attrs, defStyleAttr); init(); TypedArray typedArray = context.getTheme().obtainStyledAttributes(attrs, R.styleable.TriangleView, 0, 0); mColor = typedArray.getColor(R.styleable.TriangleView_trv_color, ContextCompat.getColor(getContext(), DEFUALT_COLOR)); mDirection = typedArray.getInt(R.styleable.TriangleView_trv_direction, mDirection); typedArray.recycle(); mPaint.setColor(mColor); } private void init() { mPaint = new Paint(); mPaint.setAntiAlias(true); mPaint.setStyle(Paint.Style.FILL); mPath = new Path(); mDirection = TOP; } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { super.onMeasure(widthMeasureSpec, heightMeasureSpec); mWidth = MeasureSpec.getSize(widthMeasureSpec); mHeight = MeasureSpec.getSize(heightMeasureSpec); final int widthMode = MeasureSpec.getMode(widthMeasureSpec); final int heightMode = MeasureSpec.getMode(heightMeasureSpec); if (mWidth == 0 || widthMode != MeasureSpec.EXACTLY) { mWidth = (int) PixelUtil.dp2px(DEFUALT_WIDTH); } if (mHeight == 0 || heightMode != MeasureSpec.EXACTLY) { mHeight = (int) PixelUtil.dp2px(DEFUALT_HEIGHT); } setMeasuredDimension(mWidth, mHeight); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); switch (mDirection) { case TOP:mPath.moveTo(0, mHeight);mPath.lineTo(mWidth, mHeight);mPath.lineTo(mWidth / 2, 0);break; case BOTTOM:mPath.moveTo(0, 0);mPath.lineTo(mWidth / 2, mHeight);mPath.lineTo(mWidth, 0);break; case RIGHT:mPath.moveTo(0, 0);mPath.lineTo(0, mHeight);mPath.lineTo(mWidth, mHeight / 2);break; case LEFT:mPath.moveTo(0, mHeight / 2);mPath.lineTo(mWidth, mHeight);mPath.lineTo(mWidth, 0);break; default:break; } mPath.close(); canvas.drawPath(mPath, mPaint); }}

布局文件添加

<com.sjl.keeplive.triange.TriangleView android:layout_width='10dp' android:layout_height='6dp' app:trv_color='@color/FFF' app:trv_direction='top' />

通過自定義的方式可以搞定四個方向,而且在代碼中也可以使用,動態(tài)添加,動態(tài)改變顏色,還是比較好的方式。

到此這篇關于Android實現(xiàn)三角形氣泡效果方式匯總的文章就介紹到這了,更多相關Android 三角形氣泡 內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網(wǎng)!

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩av中文字幕一区二区| 男人的天堂久久精品| 噜噜噜躁狠狠躁狠狠精品视频| 超碰在线99| 国产精品三p一区二区| 欧美一级久久| 91麻豆精品激情在线观看最新| 亚洲一区日本| 美女国产精品| 丝袜诱惑制服诱惑色一区在线观看 | 亚洲免费毛片| 国产精品精品| 精品一区91| 国内揄拍国内精品久久| 婷婷亚洲五月| 欧美日韩高清| 久久久免费人体| 亚洲午夜av| 国产一区视频在线观看免费| 国产伊人精品| 爽爽淫人综合网网站| 亚洲精品欧美| 国产麻豆一区二区三区| 久久99性xxx老妇胖精品| 国产剧情在线观看一区| 亚洲精品成a人ⅴ香蕉片| 日韩高清不卡一区| 国产精品一区二区99| 久久久久伊人| 亚洲成av在线| 天堂成人免费av电影一区| 青青国产精品| 精品中文在线| 欧美日韩一二| 亚洲精品福利| 久久精品资源| 欧美日韩国产v| 99国产精品视频免费观看一公开| 亚洲久久视频| 国产精品久久久久久久免费软件 | 天堂а√在线最新版中文在线| 中国字幕a在线看韩国电影| 国产尤物精品| 综合激情在线| 五月天综合网站| 韩国精品主播一区二区在线观看| 精品日韩视频| 亚洲精品免费观看| 精品国产一区二区三区2021| 午夜av一区| 国产精品.xx视频.xxtv| 福利视频一区| 黄色成人91| 久久精品xxxxx| 国产99亚洲| 国产精品地址| 免费人成黄页网站在线一区二区| 国产suv精品一区二区四区视频| 国产亚洲精品自拍| 麻豆高清免费国产一区| 国产精品毛片在线看| 精品久久久亚洲| 爽好久久久欧美精品| 福利在线免费视频| 亚洲精品自拍| 不卡在线一区| 国产精品一区二区三区美女| 亚洲天堂久久| 国产探花一区在线观看| 亚洲激情久久| 精品淫伦v久久水蜜桃| 亚洲精选久久| 欧美丝袜一区| 国产一区二区三区黄网站| 综合色一区二区| 欧美日韩在线网站| 精品高清久久| 欧美日本三区| 亚洲欧美日韩国产| 日韩欧美网址| 久久中文字幕导航| 日韩精品免费视频一区二区三区| 欧美1区免费| 国产成人精品免费视| 久久国产欧美日韩精品| 欧美成人综合| 日韩精品电影| 久久av影视| 日韩av电影一区| 老司机久久99久久精品播放免费| 久久久国产亚洲精品| 国产一区二区三区不卡视频网站 | 亚洲欧洲高清| 香蕉精品视频在线观看| 精品色999| 日韩高清一区在线| 水野朝阳av一区二区三区| 欧美日韩国产高清电影| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 天堂中文av在线资源库| 国产精品亚洲二区| 亚洲精品在线a| 丝袜美腿一区二区三区| av亚洲在线观看| 美女毛片一区二区三区四区最新中文字幕亚洲 | 亚洲香蕉久久| 国产在线日韩| av日韩中文| 国产成人精品三级高清久久91| 国产精品伦一区二区| 国产日韩视频在线| 四虎在线精品| 亚洲精品动态| 日韩一区二区三免费高清在线观看| 韩国精品主播一区二区在线观看| 精品久久久网| 国产96在线亚洲| 国内自拍视频一区二区三区| 久久亚洲国产精品尤物| 麻豆一区二区99久久久久| 国产精品a级| 久久精品国产99国产| 精品深夜福利视频| 国产精品黑丝在线播放| 精品国产第一福利网站| 免费福利视频一区二区三区| 日韩中文在线电影| 99久久久久国产精品| 亚洲欧美一区在线| 欧美日韩四区| 欧美日韩国产在线一区| 国产亚洲一级| 日韩在线视频一区二区三区| 日韩精品五月天| 国产精品www994| 91亚洲国产成人久久精品| 亚洲综合在线电影| 精品1区2区3区4区| 亚洲不卡视频| 国产高清亚洲| 欧美成人精品午夜一区二区| 精品中文字幕一区二区三区 | 欧美好骚综合网| 日韩三区在线| 亚洲欧美成人综合| 日韩成人午夜精品| 麻豆国产欧美日韩综合精品二区| 91亚洲国产| 黄色国产精品| 日本午夜免费一区二区 | 国产精品22p| 久久蜜桃精品| 亚洲综合另类| 国产精品视频首页| 日韩毛片视频| 视频在线观看国产精品| 色综合视频一区二区三区日韩| 久久激五月天综合精品| 精品一区二区三区中文字幕视频| 999久久久91| 天堂va在线高清一区| 精品一区不卡| 一区视频在线| 国产美女亚洲精品7777| 亚洲国产福利| 久久先锋影音| 国产精品久久久久久久久久久久久久久| 精品日韩一区| 亚洲激情不卡| 欧美日韩91| 另类中文字幕国产精品| 香蕉久久久久久久av网站| 国产欧美日韩在线观看视频| 黄在线观看免费网站ktv| 噜噜噜久久亚洲精品国产品小说| 国产精品99久久免费| 伊人久久婷婷| 欧美黑人巨大videos精品| 亚洲一级网站| 国产欧美69| 九九久久电影| 国产另类在线| 黄色亚洲在线| 久久精品国产一区二区| 欧美日韩免费观看一区=区三区| 国产视频网站一区二区三区| 欧美黄色网页| 欧美在线日韩| 欧美日韩国产探花| 久久影院一区二区三区| 亚洲综合丁香| 神马午夜在线视频| 欧美亚洲一区二区三区| 欧美+日本+国产+在线a∨观看| 国产精品对白久久久久粗| 午夜国产精品视频免费体验区| 国产美女亚洲精品7777| 国产一级久久| 欧美日韩视频免费观看| 国产三级一区|