在开发过程中,我们可能会经常遇到这样的需求样式:

这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上、下、左、右。

通过截图可以发现,气泡由正三角形和圆角长方形组成,于是可以通过组合来形成三角形气泡的效果,下面我们通过三种方式进行实现。

实现方式:

1、通过.9图进行实现;

2、通过shape方式实现;

3、通过自定义view的方式实现;

实现逻辑:

1、通过.9图进行实现

这种方式就不用说了吧,找你们UI小姐姐切一个.9图,使用即可,不过这种方式的图片需要占一定体积哦。

2、通过shape方式实现

正三角形

android:fromDegrees="45"

android:pivotX="-40%"

android:pivotY="80%">

android:width="15dp"

android:height="15dp" />

倒三角形

android:fromDegrees="45"

android:pivotX="135%"

android:pivotY="15%">

android:width="15dp"

android:height="15dp" />

左三角形

android:fromDegrees="-45"

android:pivotX="85%"

android:pivotY="-35%">>

android:width="15dp"

android:height="15dp" />

右三角形

android:fromDegrees="-45"

android:pivotX="15%"

android:pivotY="135%">>

android:width="15dp"

android:height="15dp" />

上面就是通过shape方式实现各个方向的代码,这种方式缺点比较明显,如果要变化不同的角的位置需要再写不同的布局。

3、通过自定义view的方式实现

由于是比较简单这里就不讲解每个怎么搞了,可以复制过去直接用

添加自定义属性

自定义代码文件

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);

}

}

布局文件添加

android:layout_width="10dp"

android:layout_height="6dp"

app:trv_color="@color/FFF"

app:trv_direction="top" />

通过自定义的方式可以搞定四个方向,而且在代码中也可以使用,动态添加,动态改变颜色,还是比较好的方式。

到此这篇关于Android实现三角形气泡效果方式汇总的文章就介绍到这了,更多相关Android 三角形气泡 内容请搜索云海天教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持云海天教程!

Android带三角形的弹窗,Android实现三角形气泡效果方式汇总相关推荐

  1. android坐标判断三角形,Android实现三角形气泡效果方式汇总

    在开发过程中,我们可能会经常遇到这样的需求样式: 这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上.下.左.右. 通过截图可以发现,气泡 ...

  2. android气泡样式图片,Android实现三角形气泡效果方式汇总

    在开发过程中,我们可能会经常遇到这样的需求样式: 这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上.下.左.右. 通过截图可以发现,气泡 ...

  3. Android实现三角形气泡效果方式汇总

    在开发过程中,我们可能会经常遇到这样的需求样式: 这张图是截取京东消息通知的弹出框,我们可以看到右上方有个三角形的气泡效果,这只是其中一种,三角形的方向还可以是上.下.左.右. 通过截图可以发现,气泡 ...

  4. Android实现三角形气泡效果方式汇总,高级安卓面试题及答案2019

    通过截图可以发现,气泡由正三角形和圆角长方形组成,于是可以通过组合来形成三角形气泡的效果,下面我们通过三种方式进行实现. 实现方式: 1.通过.9图进行实现: 2.通过shape方式实现: 3.通过自 ...

  5. android 带箭头的按钮,android自定义带箭头对话框

    本文实例为大家分享了android自定义带箭头对话框的具体代码,供大家参考,具体内容如下 import android.content.context; import android.content. ...

  6. android 带箭头提示框,Android PopupWindow与Tooltip箭头

    我看到很多关于通过传递null或新的Drawable()到setBackgroundDrawable()删除PopupWindow的边框的问题.我有相反的问题.我想在我的PopupWindow周围的边 ...

  7. android一天一次弹窗,Android自定义Toast,多次弹出时取消上次弹出,最后一次弹出为准...

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. Android的Toast用队列管理弹出的消息,这个自定义的Toast用于频繁弹出Toas ...

  8. android带动画的饼图,Android部分源码资源共享(视屏转GIF图片工具、仿抖音、仿朋友圈、仿红包、饼状图、引导图,图灵源码等)...

    视屏转为gif图片工具: 下载地址:CSDN 下载 1.封装了各项工具类,例如,日志,打印,缓存等,可直接使用项目 百度网盘:下载    提取码:fq07 2.Android高仿抖音 1.项目 的bu ...

  9. 蓝牙麦克风 android,带蓝牙麦克风的Android语音识别器

    找到我自己的问题的答案,所以我发布给其他人使用: 为了使用蓝牙麦克风进行识别识别,您首先需要将设备作为BluetoothHeadset对象,然后在其上调用.startVoiceRecognition( ...

最新文章

  1. select * 映射错误_高性能IO模型分析-浅析Select、Poll、Epoll机制(三)
  2. 为什么 Web 开发人员需要学习一个 JavaScript 框架?
  3. 计算机二级access知识点6,2019年计算机二级ACCESS考试知识点:关系数据模型
  4. java绘制一个饼图_一个简单的绘制饼图的 Java Bean 实例
  5. [leetcode]1.Two Sum
  6. C++STL之next_permutation()函数使用
  7. kotlin面试_Kotlin面试问题
  8. 硬件开发过程简介(一)
  9. 简单聊聊电商系统的订单号生成规则
  10. java课程设计仓库管理系统_java课程设计仓库管理系统.doc
  11. vim编辑器 解决vim编辑异常
  12. 关于使用response.addCookie 添加失败
  13. 神经网络计算棒怎么用,微软神经网络计算棒
  14. Epicor 调拨方式平负数库存 直接生成DMT格式
  15. PCBA方案设计——人体电子秤芯片方案
  16. Conditional Generative Adversarial Nets(CGAN)
  17. 淘宝闲鱼京东等电商api的简单调用
  18. GB28181系列笔记-语音对讲功能
  19. 拼多多:补贴与盈利背道而驰
  20. Codeforces 819 C. Mister B and Beacons on Field 容斥 数学

热门文章

  1. 使用ML.NET实现情感分析[新手篇]
  2. ApacheSkyWalking APM 生态衍生多语言监控, 支持 .NET Core
  3. 角落的开发工具集之Vs(Visual Studio)2017插件推荐
  4. .NET应用迁移到.NET Core--调查案例
  5. 在docker中运行ASP.NET Core Web API应用程序
  6. 用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API
  7. C# 快捷键/hotkey简单例子
  8. php模板引擎循环start,PHP模板引擎Smarty内建函数section,sectionelse用法详解
  9. Mysql Lost connection to MySQL server at ‘reading initial communication packet', system error: 0
  10. 用matlab求解工作时间调度问题,置换流水车间调度问题的MATLAB求解.doc