返回顶部
首页 > 资讯 > 精选 >怎么在Android中实现一个花瓣飘落效果
  • 374
分享到

怎么在Android中实现一个花瓣飘落效果

2023-06-14 20:06:49 374人浏览 泡泡鱼
摘要

这篇文章给大家介绍怎么在Android中实现一个花瓣飘落效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android是什么Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智

这篇文章给大家介绍怎么在Android中实现一个花瓣飘落效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

Android是什么

Android是一种基于linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发

实现原理

  • 首先需要生成绘制小花的坐标点,坐标点的横坐标是根据控件的宽度随机生成的,而纵坐标则设置为小花图片高度的负值(这样可以实现小花从屏幕外进入)。

  • 将这些点存储到集合当中。

  • 遍历集合根据点的位置绘制小花

  • 绘制完后不断增加各个点的纵坐标

实现步骤

定义变量将变量初始化

private SurfaceHolder mHolder;    private boolean mFlag = true;//绘制小花线程的开关标志    private ArrayList<PointF> mFlowers;//小花点的坐标集合    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);    }

实现添加花朵坐标点的方法

    private void addFlower(){        PointF point = new PointF();        point.x=mRandom.nextInt(getWidth());//根据控件宽度随机生成X轴坐标        point.y=-mBitmap.getHeight();//纵坐标设置为小花图像的负值(产生从屏幕外进入的效果)        mFlowers.add(point);//将坐标点添加进集合    }

实现SurfaceHolder.Callback及Runnable接口

public class FlowerView extends SurfaceView implements SurfaceHolder.Callback,Runnable

在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){}        }    }

在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 ArrayList<PointF> mFlowers;//小花点的坐标集合    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中实现一个花瓣飘落效果就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

--结束END--

本文标题: 怎么在Android中实现一个花瓣飘落效果

本文链接: https://lsjlt.com/news/275097.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在Android中实现一个花瓣飘落效果
    这篇文章给大家介绍怎么在Android中实现一个花瓣飘落效果,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Android是什么Android是一种基于Linux内核的自由及开放源代码的操作系统,主要使用于移动设备,如智...
    99+
    2023-06-14
  • Android实现花瓣飘落效果的步骤
    目录效果展示实现原理实现步骤完整代码展示效果展示 实现原理 首先需要生成绘制小花的坐标点,坐标点的横坐标是根据控件的宽度随机生成的,而纵坐标则设置为小花图片高度的负值(...
    99+
    2024-04-02
  • JavaScript实现雪花飘落效果特效
    没有雪的冬天失去了冬天的美景,不见了千里冰封,万里雪飘的北国之美,诗人无从写雪,画家画不出雪景,摄影师拍不到冬天的美丽。雪,是冬天的灵魂,为大地铺好背景,之后发生的都如梦似幻,就像童...
    99+
    2023-01-01
    js雪花特效 雪花特效
  • 怎么用CSS3实现雪花飘落的效果
    这篇文章将为大家详细讲解有关怎么用CSS3实现雪花飘落的效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   我们可以根据自己想要的动画效果来设置动画,比如在本例中:...
    99+
    2024-04-02
  • JavaScript如何实现雪花飘落效果
    本篇内容主要讲解“JavaScript如何实现雪花飘落效果”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“JavaScript如何实现雪花飘落效果”吧!效果图:代码:!DOCTYPE h...
    99+
    2023-07-04
  • JS和JQuery如何实现雪花飘落效果
    这篇文章主要为大家展示了“JS和JQuery如何实现雪花飘落效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“JS和JQuery如何实现雪花飘落效果”这篇文章吧...
    99+
    2024-04-02
  • jQuery实现雪花飘落效果的示例分析
    这篇文章主要介绍jQuery实现雪花飘落效果的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!示例:<!DOCTYPE html> <html>...
    99+
    2024-04-02
  • HTML5中canvas如何实现雪花飘落特效
    这篇文章给大家分享的是有关HTML5中canvas如何实现雪花飘落特效的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。最终效果图如下: 图1一、需求分析圆形雪花本示例中雪花形状使用圆形雪花数量固定根据图1...
    99+
    2023-06-09
  • CSS3中怎么利用animation属性实现雪花飘落特效
    这篇文章给大家介绍CSS3中怎么利用animation属性实现雪花飘落特效,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在CSS3中我们可以使用animation属性来创建复杂的动画效...
    99+
    2024-04-02
  • HTML5怎么实现树叶飘落动画效果
    这篇“HTML5怎么实现树叶飘落动画效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“HT...
    99+
    2024-04-02
  • html5中怎么利用canvas实现3d雪花飘舞效果
    html5中怎么利用canvas实现3d雪花飘舞效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。var SCREEN_WID...
    99+
    2024-04-02
  • 怎么在Android应用中实现一个动画效果
    本篇文章给大家分享的是有关怎么在Android应用中实现一个动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Android 三种动画详解帧动画一张张图片不断的切换,形成动...
    99+
    2023-05-31
    android roi
  • 怎么在Android应用中实现一个抽屉效果
    怎么在Android应用中实现一个抽屉效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。实现原理其实单就一个SwipeLayout的实现原理来讲的话,还是很简单...
    99+
    2023-05-31
    android roi
  • 怎么在android中利用ProgressDialog实现一个全屏效果
    怎么在android中利用ProgressDialog实现一个全屏效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。ProgressDialog的创建方式有两种,一种是ne...
    99+
    2023-05-30
  • 怎么在android中利用ProgressDialog实现一个加载效果
    怎么在android中利用ProgressDialog实现一个加载效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。先自定义一个类继承ProgressDialogpubli...
    99+
    2023-05-31
    android progressdialog gr
  • 怎么在Android中利用view实现一个太极效果
    怎么在Android中利用view实现一个太极效果?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Android自定义view实现太极效果实例代码之前一直想要个加载的load...
    99+
    2023-05-31
    android view roi
  • js怎么实现花瓣漫天飞舞特效
    这篇文章主要讲解了“js怎么实现花瓣漫天飞舞特效”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“js怎么实现花瓣漫天飞舞特效”吧!效果:代码:<!DOCTYPE HTML&nb...
    99+
    2023-07-04
  • 怎么在vbs中实现一个tasklist效果
    怎么在vbs中实现一个tasklist效果?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。核心代码Option explicit If righ&#...
    99+
    2023-06-08
  • Android中怎么实现一个倒计时效果
    今天就跟大家聊聊有关Android中怎么实现一个倒计时效果,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。需求:a.在后台添加时,如果是今日直播,则需要添加开始时间(精确到秒);b.离...
    99+
    2023-05-30
    android
  • Android中怎么实现一个刮刮卡效果
    本篇文章为大家展示了Android中怎么实现一个刮刮卡效果,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、Xfermode 通过使用Xfermode将绘制的图形的像素和Canvas上对应位置的像素...
    99+
    2023-05-30
    android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作