在Android开发中如何实现花瓣飘落效果
发表于:2025-02-13 作者:千家信息网编辑
千家信息网最后更新 2025年02月13日,这篇文章给大家分享的是有关在Android开发中如何实现花瓣飘落效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。实现步骤1.定义变量将变量初始化 private S
千家信息网最后更新 2025年02月13日在Android开发中如何实现花瓣飘落效果实现步骤
这篇文章给大家分享的是有关在Android开发中如何实现花瓣飘落效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
实现步骤
1.定义变量将变量初始化
private SurfaceHolder mHolder; private boolean mFlag = true;//绘制小花线程的开关标志 private ArrayListmFlowers;//小花点的坐标集合 private Random mRandom;//负责随机数生成 private Bitmap mBitmap;//小花的图案 public FlowerView(Context context) { super(context); init(); } public FlowerView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public FlowerView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ mHolder = getHolder(); mHolder.addCallback(this); //设置背景透明 this.setZOrderOnTop(true); mHolder.setFormat(PixelFormat.TRANSLUCENT); mFlowers = new ArrayList<>(); mRandom = new Random(); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_hua); }
2.实现添加花朵坐标点的方法
/** * 添加花朵 */ private void addFlower(){ PointF point = new PointF(); point.x=mRandom.nextInt(getWidth());//根据控件宽度随机生成X轴坐标 point.y=-mBitmap.getHeight();//纵坐标设置为小花图像的负值(产生从屏幕外进入的效果) mFlowers.add(point);//将坐标点添加进集合 }
3.实现SurfaceHolder.Callback及Runnable接口
public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable
4.在run方法中实现绘制逻辑
@Override public void run() { while (mFlag){ try { Thread.sleep(80);//控制小花的下落速度 Canvas canvas = mHolder.lockCanvas(); PointF pointF = null; //清屏操作(否则会残留一些无用图像) if(canvas!=null){ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); }else { continue; } for(PointF point: mFlowers){ pointF = point; canvas.drawBitmap(mBitmap,pointF.x,pointF.y,null); int i = mRandom.nextInt(getHeight()/50)+getHeight()/50;//修改雨滴线的纵坐标,使其看起来在下雨 pointF.y=pointF.y+i; } mHolder.unlockCanvasAndPost(canvas); addFlower(); //当绘制点的纵坐标大于控件高度时,将该点移除 if(mFlowers.size()>0&&pointF!=null&&pointF.y>=getHeight()){ mFlowers.remove(pointF); } }catch (Exception e){} } }
5.在SurfaceHolder.Callback的回调方法中开启绘制线程
@Override public void surfaceCreated(SurfaceHolder holder) { mFlag = true;//surface创建时将线程开关打开 new Thread(this).start();//开启线程绘制 } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { mFlowers.clear();//当控件发生改变时清除之前的绘制点 } @Override public void surfaceDestroyed(SurfaceHolder holder) { mFlag = false;//当surface销毁时关掉绘制线程 }
完整代码展示
public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable{ private SurfaceHolder mHolder; private boolean mFlag = true;//绘制小花线程的开关标志 private ArrayListmFlowers;//小花点的坐标集合 private Random mRandom;//负责随机数生成 private Bitmap mBitmap;//小花的图案 public FlowerView(Context context) { super(context); init(); } public FlowerView(Context context, AttributeSet attrs) { super(context, attrs); init(); } public FlowerView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } private void init(){ mHolder = getHolder(); mHolder.addCallback(this); //设置背景透明 this.setZOrderOnTop(true); mHolder.setFormat(PixelFormat.TRANSLUCENT); mFlowers = new ArrayList<>(); mRandom = new Random(); mBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ic_hua); } @Override public void surfaceCreated(SurfaceHolder holder) { mFlag = true; new Thread(this).start(); } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { mFlowers.clear(); } @Override public void surfaceDestroyed(SurfaceHolder holder) { mFlag = false; } @Override public void run() { while (mFlag){ try { Thread.sleep(80); Canvas canvas = mHolder.lockCanvas(); PointF pointF = null; //清屏操作 if(canvas!=null){ canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR); }else { continue; } for(PointF point: mFlowers){ pointF = point; canvas.drawBitmap(mBitmap,pointF.x,pointF.y,null); int i = mRandom.nextInt(getHeight()/50)+getHeight()/50;//修改雨滴线的纵坐标,使其看起来在下雨 pointF.y=pointF.y+i; } mHolder.unlockCanvasAndPost(canvas); addFlower(); if(mFlowers.size()>0&&pointF!=null&&pointF.y>=getHeight()){ mFlowers.remove(pointF); } }catch (Exception e){} } } /** * 添加花朵 */ private void addFlower(){ PointF point = new PointF(); point.x=mRandom.nextInt(getWidth()); point.y=-mBitmap.getHeight(); mFlowers.add(point); }}
感谢各位的阅读!关于"在Android开发中如何实现花瓣飘落效果"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
小花
线程
纵坐标
效果
坐标
控件
方法
花朵
生成
花瓣
开发
内容
变量
图像
图案
更多
标志
标点
篇文章
背景
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
穿越火线的服务器多少钱
数据库报错19816
数据库设计三线图怎么画
viger虚拟服务器
西安网络安全现状
德阳网络安全局
数据库系统工程师薪资
vpn服务器免费
高性能数据库之分库分表
网络安全技能知识判断
深圳10年软件开发待遇
网络安全 中国长城
广州创云互联网科技有限公司
微信服务器保存数据多久
数据库测试流程
服务器时间不足怎么办
软件开发的就业前景及薪酬
网安启明星网络安全知识大赛题
qq软件开发
湖北创谷互联网科技
域服务器安全设置
技术方案 软件开发
服务器安全实训总结
江阴lenovo服务器维修价格
晋宁区综合软件开发报价表
问您服务器
杭州乐点网络技术有限公司
数据库和数据库管理系统是大
关于网络安全教育图片
计算机网络安全读书心得