Android 绘制气泡
效果图
思想
1.绘制气泡
随机xy轴,r半径,速度,随机xy方向(方向就是x和y加减同一个随机偏移量),随机透明度
2.气泡移动和复用气泡
在原来的xy+=或者-=偏移量,每一次便宜判断xy是否超过屏幕宽度和高度,超过就重新随机生成
3.代码实现
制气泡效果
public class QiPao extends View {public Paint paint;public DisplayMetrics displayMetrics;public QiPao(Context context) {this(context,null);}public QiPao(Context context, @Nullable AttributeSet attrs) {this(context, attrs,0);displayMetrics = context.getResources().getDisplayMetrics();init();}public QiPao(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);}Timer timer;@SuppressLint("ResourceAsColor")public void init(){paint = new Paint();paint.setAntiAlias(true);timer = new Timer();timer.schedule(new TimerTask() {@Overridepublic void run() {postInvalidate();//在子线程中执行 postInvalidate()会使onDrow()方法得到执行}}, 300, 10);for (int i = 0; i <100 ; i++) {QiPaoPoin qiPaoPoin = new QiPaoPoin();//点的位置qiPaoPoin.setX(random.nextFloat()*displayMetrics.widthPixels);qiPaoPoin.setY(random.nextFloat()*displayMetrics.heightPixels);int v = random.nextInt(2)+1;qiPaoPoin.setxSke(random.nextFloat()*((v==1)?2:-2));v = random.nextInt(2)+1;qiPaoPoin.setySke(random.nextFloat()*((v==1)?2:-2));qiPaoPoin.setDiaph(random.nextInt(100)+100);qiPaoPoin.setSpeet(random.nextFloat());//圆的半径qiPaoPoin.setRadius(random.nextInt(170)+30);list.add(qiPaoPoin);}}@SuppressLint("NewApi")@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);aaa();list.forEach((element)->{paint.setARGB(element.getDiaph(),255,255,255);canvas.drawCircle(element.getX(),element.getY(),element.getRadius(),paint);});}List<QiPaoPoin> list =new ArrayList<>();Random random = new Random();float yske,xske;//xy轴偏移量int radius;//半径public void aaa(){for (int i = 0; i <list.size() ; i++) {yske = list.get(i).getySke();//y偏移xske = list.get(i).getxSke();//x偏移radius = list.get(i).getRadius();//半径//如果不是按住就解锁if(!isDown){list.get(i).setLock(false);}if(list.get(i).isLock()){if(isMove){//跟随鼠标移动list.get(i).setY(lastY);list.get(i).setX(lastX);}}else {//点击不动if(isDown&&(lastX<=list.get(i).getX()+list.get(i).getRadius()&&lastX>=list.get(i).getX()-list.get(i).getRadius())&&(lastY<=list.get(i).getY()+list.get(i).getRadius()&&lastY>=list.get(i).getY()-list.get(i).getRadius())){if(isMove){//跟随鼠标移动list.get(i).setY(lastY);list.get(i).setX(lastX);list.get(i).setLock(true);}}else {//这里才是真正的复用 和实现移动气泡if(list.get(i).getY()-(yske+radius)<displayMetrics.heightPixels&&list.get(i).getY()-(yske+radius)>-radius*2){list.get(i).setY(list.get(i).getY()+yske);}else {//结束完随机y轴出现 和任意方向飘动list.get(i).setY(random.nextFloat()*displayMetrics.heightPixels);
// int v = random.nextInt(2)+1;
// list.get(i).setxSke(random.nextFloat()*((v==1)?3:-3));
// v = random.nextInt(2)+1;
// list.get(i).setySke(random.nextFloat()*((v==1)?3:-3));}if(list.get(i).getX()-(xske+radius)<displayMetrics.widthPixels&&list.get(i).getX()-(xske+radius)>-radius*2){list.get(i).setX(list.get(i).getX()+xske);}else{//结束完随机x轴出现 和任意方向飘动list.get(i).setX(random.nextFloat()*displayMetrics.widthPixels);int v = random.nextInt(2)+1;list.get(i).setxSke(random.nextFloat()*((v==1)?2:-2));v = random.nextInt(2)+1;list.get(i).setySke(random.nextFloat()*((v==1)?2:-2));}}}}}public int lastX,lastY;public boolean isDown,isMove;@Overridepublic boolean onTouchEvent(MotionEvent event) {int x = (int) event.getX();int y = (int) event.getY();switch (event.getAction()){case MotionEvent.ACTION_DOWN:// 记录触摸点坐标lastX = x;lastY = y;isDown = true;break;case MotionEvent.ACTION_MOVE:lastX = x;lastY = y;isMove = true;break;case MotionEvent.ACTION_UP:case MotionEvent.ACTION_CANCEL:isDown = false;isMove = false;break;}return true;}public void dis(){timer.cancel();}
Android 绘制气泡相关推荐
- android 代码设置textview draw,Android 自定义气泡TextView
效果如下: 可以设置颜色.描边.三角形高度和方向,以向上居中和向下居中为例 气泡.png 实现思路: 使用Canvas绘制气泡形状,因为气泡中间只显示文字,所以我直接继承TextView,重写onDr ...
- android背景气泡,android之View跟LinearLayout的重写(实现背景气泡和波纹效果)
android之View和LinearLayout的重写(实现背景气泡和波纹效果) 前两天看了仿android L里面水波纹效果的两篇博客 Android L中水波纹点击效果的实现 Android自定 ...
- android 聊天气泡_android聊天气泡在android中构建ios风格的聊天
android 聊天气泡 重点 (Top highlight) In this post, we'll explore how to do two things: 1) create live cha ...
- android 呼吸气泡动画,Android:会呼吸的悬浮气泡
Android:会呼吸的悬浮气泡 写在前面 最早看到这个效果是 MIUI6 系统升级界面,有很多五颜六色的气泡悬浮着,觉得很好看. 可惜现在找不到动态图了.而且虽然 MIUI8 更新界面也有类似的气泡 ...
- Android绘制流程
一.前言 1.1.C++界面库 MFC.WTL.DuiLib.QT.Skia.OpenGL. Android里面的画图分为2D和3D两种: 2D是由Skia 来实现的,3D部分是由OpenGL实现的. ...
- android绘制高亮区域,实现高亮某行的RecyclerView效果
最终效果 全部代码:github 方式有二 组合控件,RecyclerView + View 自定义RecyclerView 1中只需要控制View,但是不好封装. 2中需要重写RecyclerVie ...
- android绘制view的过程
1 android绘制view的过程简单描述 简单描述可以解释为:计算大小(measure),布局坐标计算(layout),绘制到屏幕(draw): 下面看看每一步的动作到底 ...
- Android绘制(三):Path结合属性动画, 让图标动起来!
Android绘制(一):来用shape绘出想要的图形吧! Android绘制(二):来用Path绘出想要的图形吧! 目录 效果图 前言 绘制 属性动画 最后 效果图 不废话, 直接上效果图, 感兴趣 ...
- android绘制矢量图_Android矢量可绘制
android绘制矢量图 In this tutorial, we'll be discussing Android Vector Drawable. Furthermore, we'll be im ...
最新文章
- Java处理高并发、高负载类网站的优化方法
- 使用Win32汇编开发一个dll并在C#中调用
- python 预测足球_利用 Python 预测英雄联盟胜负,分析了 5 万多场比赛才得出的数据!...
- 【荐】中国最有潜力的十位企业家(IT行业占大半)
- go int 转切片_「快学 Go 语言」第 4 课——低调的数组
- [合作赞助]九叔生日由中国移动、51cto、奇虎360以及一帆浩瀚联合举办
- mysql 编码种类_MySQL 编码
- [RHEL5企业级Linux服务攻略]--第1季 Linux服务器的搭建与测试
- 基于阈值和深度学习的玉米常见锈病严重程度自动模糊逻辑预测(工具+综述+玉米锈病严重程度数据集)
- refprop物性库_refprop 9.0 下载-refprop9.0 32/64位下载(NIST物性查询软件) 中文版 - 河东下载站...
- ElasticSearch查询模板
- 基于Flink的JDBC插入Nested结构数据到Clickhouse
- Element UI Table表格样式调整
- ubuntu 软件管理
- 围绕开放标准改进WSO2 API Manager密钥管理体系结构
- improve your Github overview page
- Python变量与字符串操作
- 微服务架构下的服务调用与鉴权——某保险公司微服务平台实施案例分享
- 华为固件解包工具linux,华为app固件解包工具下载
- 工作绩效数据、工作绩效报告和工作绩效信息的区别