动画库地址:https://github.com/glomadrian/Grav
一、新建Android工程
二、添加Library
1、Android也是模块化编程,方便调用已有的库文件,添加Library步骤:File->New->Import Module进入下图所示界面,选中从Github下载下来的Grav库文件。
2.添加好库文件会提示找不到该插件,解决办法就是在根项目的build.gradle添加依赖,添加完成之后可以看到Project列表出现了grav。
classpath 'com.novoda:bintray-release:0.3.4'
3.接下来给app模块添加grav模块的依赖,步骤如下图所示,依赖添加成功后就可以调用其中的API了。
三、移植代码
1.首先找到Github代码中活动文件和布局文件的位置,方便引用。
2.解决butterknife插件问题
2.1.File->Setting,搜索插件进行安装,安装完成会提示重启。
2.2.重启之后,需要在app的构建框架下面添加远程依赖,注意版本是8.4.0。
compile 'com.jakewharton:butterknife:8.4.0'
2.3.然后同步工程和框架文件,此时的butterknife不再是红色,插件可以正常使用了。
3.移植之后的工程目录及代码。
MainActivity.java
import android.os.Bundle;
import android.support.annotation.LayoutRes;
import android.support.v7.app.AppCompatActivity;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
showView(R.layout.grav);
}
private void showView(@LayoutRes int view){
getSupportFragmentManager().beginTransaction().replace(R.id.container,
GravSampleFragment.newInstance(view)).commit();
}
}
GravSampleFragment.java
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.github.glomadrian.grav.GravView;
import butterknife.BindView;
import butterknife.ButterKnife;
public class GravSampleFragment extends Fragment {
public static final String KEY_LAYOUT = "KEY_LAYOUT";
private int layout;
@BindView(R.id.grav) GravView gravView;
public static GravSampleFragment newInstance(int layout) {
Bundle args = new Bundle();
args.putInt(KEY_LAYOUT, layout);
GravSampleFragment fragment = new GravSampleFragment();
fragment.setArguments(args);
return fragment;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
layout = getArguments().getInt(KEY_LAYOUT);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(layout, container, false);
}
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
ButterKnife.bind(this, view);
}
@Override
public void onPause() {
super.onPause();
gravView.stop();
}
}
grav.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#00BFFF"
tools:context="com.example.zht.gravtest.MainActivity">
<com.github.glomadrian.grav.GravView
android:id="@+id/grav"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerInParent="true"
app:colorGenerator="com.github.glomadrian.grav.generator.paint.ArrayColorGenerator"
app:array_colors="@array/Spectral"
app:pointGenerator="com.github.glomadrian.grav.generator.point.RegularPointGenerator"
app:regular_cell_size="100"
app:regular_variance="200"
app:gravGenerator="com.github.glomadrian.grav.generator.grav.BallGenerator"
app:ball_size="3dp"
app:animationGenerators="@array/BallWaveAnimations"
app:side_to_side_min_duration="2000"
app:side_to_side_max_duration="5000"
app:side_to_side_direction="upToDown"
app:shake_variance="50dp"
app:ball_size_from_size="3dp"
app:ball_size_to_size="6dp"
app:shake_direction="horizontal"
/>
</RelativeLayout>
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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">
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:background="@color/colorPrimary"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize">
</android.support.v7.widget.Toolbar>
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</RelativeLayout>
四、APP效果图