Android snowfall下雪控件

2017-12-13  本文已影响0人  hm_marvin

前言

第一次发简书,有点紧张。如果有什么bug或建议欢迎大家指点。

临近圣诞,公司项目有个下雪场景的需求,类似的控件网上很多,但是我比较喜欢的是github上 https://github.com/JetradarMobile/android-snowfall这一个,用的是Kotlin语言,看完后让我感受到Kotlin语言比java简洁方便,不愧是谷歌的亲儿子。由于项目需求,我得把控件改java语言和使用SurfaceView,在子线程绘制,避免Ui线程阻塞。

效果:

demo.gif

代码:

public class myRunnable implements Runnable {
        @Override
        public void run() {
            while (true){
                Canvas canvas =null;
                try {
                    synchronized (holder){
                        canvas = holder.lockCanvas();
                        //清除画布
                        canvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
                        for (Snowflake snowflake :list){
                            snowflake.draw(canvas);
                            snowflake.update();
                        }
                    }
                }catch (Exception e){
                    e.printStackTrace();
                }finally {
                    if (canvas!=null){
                        holder.unlockCanvasAndPost(canvas);
                    }
                }

            }
        }
    }

主要是在新开的子线程,不断在里面绘制和更新集合里每个雪花的位置透明度等

<com.marvin.snowfall.SnowfallView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/sf_snow"
        app:snowflakesNum="200"
        app:snowflakeAlphaMin="150"
        app:snowflakeAlphaMax="255"
        app:snowflakeAngleMax="5"
        app:snowflakeSizeMin="2dp"
        app:snowflakeSizeMax="40dp"
        app:snowflakeSpeedMin="2"
        app:snowflakeSpeedMax="10"
        app:snowflakesFadingEnabled="true"
        app:snowflakesAlreadyFalling="false"
        app:snowflakeImage="@mipmap/snowflake"
        />

和原本的控件一样可以进行数量控制,透明度,大小,速度等

https://github.com/hm-Marvin/SnowFall-master可以下载源码。

上一篇下一篇

猜你喜欢

热点阅读