前言
第一次发简书,有点紧张。如果有什么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"
/>
和原本的控件一样可以进行数量控制,透明度,大小,速度等
网友评论