winter is coming...
Clone or download
HelloVass HelloVass
HelloVass and HelloVass update 使用说明
Latest commit b750edf Sep 29, 2016
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.idea 增加 README 说明信息 Sep 28, 2016
app first commit Sep 27, 2016
design replace gif Sep 27, 2016
gradle/wrapper first commit Sep 27, 2016
snowingview first commit Sep 27, 2016
.gitignore first commit Sep 27, 2016
README.md update 使用说明 Sep 29, 2016
build.gradle first commit Sep 27, 2016
gradle.properties first commit Sep 27, 2016
gradlew first commit Sep 27, 2016
gradlew.bat first commit Sep 27, 2016
settings.gradle first commit Sep 27, 2016

README.md

SnowingView

winter is coming...

介绍

一个看起来还不错的下雪动画。

功能&&实现

  1. 使用 Matrix 产生随机大小、透明度的雪花
  2. 使用 HandlerThread 来计算雪花的下一个位置
  3. 使用加速度传感器判断用户在 X 轴的倾斜方向,使雪花产生左右飘动的效果

缺点&改进

  1. 还未用 LeakCanary 检测是否有内存泄漏的情况
  2. 暂时还不支持 wrap_content
  3. 可能会采用 SurfaceView 来绘制提高效率

实际效果

SnowingView效果

使用(如果有人想用的话)

Step1

在布局中添加 SnowingView

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/black"
    >
    
  <info.hellovass.snowingview.widgets.SnowingView
      android:id="@+id/snowing_view"
      android:layout_width="match_parent"
      android:layout_height="match_parent"
      android:visibility="gone"
      app:src="@drawable/ic_snowflake"
      />

  <Switch
      android:id="@+id/sw_snowing"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_gravity="center"
      android:text="winter is coming..."
      android:textColor="@android:color/white"
      android:textSize="16sp"
      />
      
</FrameLayout>

Step2

在 Activity 中,调用 SnowingView 的 startFall() 或者 stopFall() 方法。

public class SampleActivity extends AppCompatActivity {

  private SnowingView mSnowingView;

  private Switch mSwitch;

  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sample);

    mSwitch = (Switch) findViewById(R.id.sw_snowing);
    mSnowingView = (SnowingView) findViewById(R.id.snowing_view);

    mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
      @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

        if (isChecked) {
          mSnowingView.startFall();  // 开始下雪
        } else {
          mSnowingView.stopFall(); // 停止下雪
        }
      }
    });
  }
}

参考