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

您的位置:首頁技術(shù)文章
文章詳情頁

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

瀏覽:198日期: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)

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

添加自定義屬性

<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)改變顏色,還是比較好的方式。

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

標簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩高清在线不卡| 精品久久网站| 国产综合视频| 色婷婷亚洲mv天堂mv在影片| 麻豆国产精品777777在线| 88久久精品| 日韩av在线免费观看不卡| 日韩国产在线观看一区| 日韩欧美中文字幕在线视频| 天堂久久av| 亚洲tv在线| 欧美欧美黄在线二区| 日韩av中文在线观看| 亚洲激情婷婷| 日韩啪啪电影网| 蜜臀国产一区二区三区在线播放| 国产精品亚洲二区| 国产精品久久久久久久久免费高清 | 美日韩精品视频| 国产亚洲福利| 天堂va在线高清一区| 欧美永久精品| 久久97视频| 蜜桃成人精品| 欧美日韩国产高清电影| 亚洲欧洲另类| 日韩激情中文字幕| 国产欧美日韩精品高清二区综合区| 亚洲一区二区小说| 日韩天堂av| 麻豆视频一区二区| 欧美中文高清| 国产欧美一区二区三区米奇| 日韩三区四区| 久久影院资源站| 欧美日韩国产一区二区在线观看| 亚洲国产成人精品女人| 欧美激情精品| 欧美激情亚洲| 日韩精品免费一区二区夜夜嗨| 久久国产精品99国产| 九九九精品视频| 亚洲精品影视| 视频在线观看91| 久久久久国产精品一区二区| 美女在线视频一区| 老司机精品在线| 欧美一区久久| 精品免费在线| 成人午夜精品| 国产精品外国| 黄色亚洲免费| 99精品国产一区二区三区| 久久久夜精品| 日韩av有码| 欧洲一级精品| 97欧美在线视频| 青青草视频一区| 欧美日韩在线二区| 亚洲一级高清| 久久精品999| 精品不卡一区| 欧美日韩国产传媒| 国产精品网在线观看| 日韩大片在线播放| 成人综合一区| 综合欧美亚洲| 日韩1区2区| 日本 国产 欧美色综合| 国产欧美日韩一区二区三区四区| 欧美亚洲网站| 日本va欧美va欧美va精品| 精品视频国内| 在线看片日韩| 欧美性www| 欧美日韩一区二区三区视频播放| 日韩高清三区| 久久国产电影| 日韩精品午夜视频| 国产一区亚洲| 精品欠久久久中文字幕加勒比| 免费的成人av| 久久久9色精品国产一区二区三区| 日本免费一区二区视频| 在线综合亚洲| 日韩精品免费一区二区三区| 911精品国产| 好看不卡的中文字幕| 国产99在线| 美女尤物国产一区| 日产欧产美韩系列久久99| 自拍日韩欧美| 日韩在线综合| 麻豆视频观看网址久久| 亚洲精品进入| 好吊视频一区二区三区四区| 91av亚洲| 国内一区二区三区| 国产精品激情| 欧美一级二级三级视频| 一区二区亚洲视频| 国产精品婷婷| 激情久久久久久| 国产 日韩 欧美一区| 精品亚洲免a| 国产精品分类| 国产精品videossex| 亚洲精品动态| 国产一区二区精品| 91麻豆精品| 亚洲人成精品久久久| 亚洲激情不卡| 亚洲自啪免费| 蜜桃视频一区二区| 欧美日韩国产传媒| 亚洲一区黄色| 国产精品啊v在线| 欧美精选视频一区二区| 精品午夜久久| 久久精品九色| 精品国产黄a∨片高清在线| 国产精品igao视频网网址不卡日韩| 中文字幕一区二区av| 视频在线观看国产精品| 男人的天堂久久精品| 视频一区二区三区中文字幕| 免费精品视频| 三级亚洲高清视频| 蜜臀av国产精品久久久久| 蜜臀av一区二区在线免费观看 | 亚洲深夜福利在线观看| 香蕉精品999视频一区二区| 精品1区2区3区4区| 午夜在线视频一区二区区别| 爽好久久久欧美精品| 亚洲影视一区| 日韩av中文字幕一区| 国产免费av国片精品草莓男男 | 久久一区视频| 国际精品欧美精品| 精品国模一区二区三区| 美女少妇全过程你懂的久久| 图片区亚洲欧美小说区| 午夜日本精品| 男女激情视频一区| 日本视频在线一区| 国产精久久久| 国产欧美一区二区三区精品酒店| 亚洲成人国产| 五月精品视频| 亚洲bt欧美bt精品777| 成人精品久久| 日本va欧美va精品发布| 高清一区二区| 欧美激情精品| 久久中文字幕av| 日韩va亚洲va欧美va久久| 在线手机中文字幕| 亚洲精品欧美| 偷拍精品精品一区二区三区| 日韩精品一区二区三区中文在线 | 日韩专区一卡二卡| 日韩一区二区三区免费视频| 国产伦理久久久久久妇女| 国产欧美一区二区三区精品酒店| 精品一区在线| 久久国产精品99国产| 国产亚洲一卡2卡3卡4卡新区| 国产盗摄——sm在线视频| 久久精品主播| 亚洲精品自拍| 伊人久久视频| 综合激情一区| 久久精品九色| 麻豆精品91| 久久福利在线| 欧美精品一区二区三区精品| 日本视频中文字幕一区二区三区| 国产传媒在线| 性欧美长视频| 欧美激情视频一区二区三区免费 | 激情视频一区二区三区| 免费成人在线影院| 精品国产乱码| 日韩影院在线观看| 麻豆成人av在线| 9国产精品视频| 精品一区二区三区中文字幕 | 日韩一区二区三区免费| 国产综合婷婷| 免费视频一区三区| 久久av偷拍| 午夜久久福利| 国产视频一区三区| 国产精品亚洲四区在线观看 | 精品视频一区二区三区在线观看 | 精品久久国产一区| 亚洲综合不卡| 国产精品久久久久av蜜臀| 欧美日韩激情在线一区二区三区|