首页 > 其他分享 >直播平台搭建,自定义气泡效果(BubbleView)

直播平台搭建,自定义气泡效果(BubbleView)

时间:2023-11-28 14:12:04浏览次数:32  
标签:自定义 int private BubbleView import android 气泡

直播平台搭建,自定义气泡效果(BubbleView)

 

package com.example.myapplication;
import android.content.Context;
import android.graphics.BlurMaskFilter;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
import android.util.Log;
import android.util.TypedValue;
import android.view.View;
import androidx.annotation.Nullable;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class BubbleView extends View {
    private int mBubbleMaxRadius = 15;          // 气泡最大半径 px
    private int mBubbleMinRadius = 8;           // 气泡最小半径 px
    private int mBubbleMaxSize = 50;            // 气泡数量
    private int mBubbleRefreshTime = 50;        // 刷新间隔
    private int mBubbleMaxSpeedY = 2;           // 气泡速度
    private int mBubbleMaxSpeedX = 4;           // 气泡速度
    private int mBubbleAlpha = 128;             // 气泡画笔
    private float mContentWidth;                 // 瓶子宽度
    private float mContentHeight;                // 瓶子高度
    private RectF mContentRectF;                // 实际可用内容区域
    private Paint mBubblePaint;                 // 气泡画笔
    public BubbleView(Context context) {
        this(context, null);
    }
    public BubbleView(Context context, @Nullable AttributeSet attrs) {
        this(context, attrs, 0);
    }
    public BubbleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        mContentWidth = dp2px(130);
        mContentHeight = dp2px(260);
        mBubblePaint = new Paint();
        mBubblePaint.setColor(Color.GREEN);
        mBubblePaint.setAlpha(mBubbleAlpha);
    }
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec);
        int width;
        int height;
        if (widthSpecMode == MeasureSpec.EXACTLY || widthSpecMode == MeasureSpec.AT_MOST) {
            width = widthSize;
            mContentWidth = width;
        } else {
            width = (int) mContentWidth;
        }
        if (heightSpecMode == MeasureSpec.EXACTLY || heightSpecMode == MeasureSpec.AT_MOST) {
            height = heightSize;
            mContentHeight = height;
        } else {
            height = (int) mContentHeight;
        }
        setMeasuredDimension(width, height);
    }
    @Override
    protected void onSizeChanged(int w, int h, int oldw, int oldh) {
        super.onSizeChanged(w, h, oldw, oldh);
        mContentRectF = new RectF(getPaddingLeft(), getPaddingTop(), w - getPaddingRight(), h - getPaddingBottom());
    }
    @Override
    protected void onDraw(Canvas canvas) {
        super.onDraw(canvas);
        drawBubble(canvas);
    }
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        startBubbleSync();
    }
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        stopBubbleSync();
    }
 

目前为自定义属性,布局文件中直接引用即可。

 


  <com.example.myapplication.BubbleView
        android:layout_width="300dp"
        android:layout_height="100dp"/>

 

以上就是 直播平台搭建,自定义气泡效果(BubbleView),更多内容欢迎关注之后的文章

 

标签:自定义,int,private,BubbleView,import,android,气泡
From: https://www.cnblogs.com/yunbaomengnan/p/17861837.html

相关文章

  • Qt自定义QLineEdit
    一、概述自定义QLineEdit,让QLineEdit变的好看一点。实现效果:1.普通输入(可以输入汉字、字符、数字)2.只能输入数字3.密码模式输入框二、代码示例1.创建EditText.h和EditText.cpp[默认样式]#include"EditText.h"EditText::EditTex......
  • Qt创建一个自定义QPushButton
    一、概述使用Qt创建一个通用的QPushButton。应用一些样式把按钮做的好看一些。步骤:1.新建一个Button类然后继承QPushButton2.设置Button的通用样式(ps:使用.qss文件的形式应用样式)3.个性化设置不同的样式4.做一个圆角按钮、带图标按......
  • SpringCloud——自定义断言工厂
    目录场景:用户的请求头中需要有指定的用户名和密码才能访问。断言工厂参考系统AfterRoutePredicateFactory写法。packagecom.zjw.factory;importlombok.Getter;importlombok.Setter;importorg.springframework.cloud.gateway.handler.predicate.AbstractRoutePredi......
  • 【2023CANN训练营第二季】——Ascend C自定义算子工程介绍及实验
    一、自定义算子工程介绍与创建自定义算子工程是一个包含用户编写的host侧和kerne|侧算子实现文件的,用于编译和安装自定义算子run包的工程框架。CANN软件包中提供了工程创建工具msopgen,开发者可以输入算子原型定义文件生成AscendC算子开发工程。需要编写AddCustom算子的原型定义......
  • 内核模块开发入门指南:在CentOS 7上实现自定义功能
    内核模块开发入门指南:在CentOS7上实现自定义功能在CentOS7及其他Linux系统中,内核模块是一种动态加载到内核中的代码,用于扩展内核的功能。内核模块的开发允许开发者在不重新编译内核的情况下,添加新的功能、驱动或调整系统行为。本文将带你入门内核模块的开发,在CentOS7上实现自......
  • 自定义标签和过滤器
    1自定义过滤器 -第一步:在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag-第二步:在app中创建templatetags包(包名只能是templatetags,不能改)-第三步:在包内,新建py文件(如:my_tags.py)-第四步:写代码(过滤器) fromdjangoimporttemplate......
  • 直播系统app源码,自定义可以暂停的倒计时
    直播系统app源码,自定义可以暂停的倒计时用到的抽象类: publicabstractclassTimerListener{  /**   *当倒计时开始   */  publicvoidonStart(){  }  /**   *当倒计时恢复暂停   */  publicvoidonResume(){  }  /**  ......
  • app直播源码,uniapp之自定义顶部样式
    app直播源码,uniapp之自定义顶部样式 //需要自定义顶部样式的页面配置{"path":"pages/case/index","style":                                           {  "navigationBarTitleT......
  • Vue中自定义组件监听事件传参
    自定义数字框组件如下<template><divclass="count-box"><button@click="handleSub"class="minus">-</button><input:value="value"@change="handleChange"class="inp"typ......
  • PIP换源_Pycharm快捷键_自定义文件头模板
    【一】PIP更换国内源永久换源打开控制台或终端,并输入以下命令:pipconfigsetglobal.index-urlhttps://mirrors.aliyun.com/pypi/simple/更改pip源后,可以通过以下命令验证:pipconfiggetglobal.index-url如果返回值为https://mirrors.aliyun.com/pypi/simple/,则表......