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
B_y_<1
diff --git a/ToggleButtonLib/res/values/toggle_button_attrs.xml b/ToggleButtonLib/res/values/toggle_button_attrs.xml
deleted file mode 100644
index e3dfa13..0000000
--- a/ToggleButtonLib/res/values/toggle_button_attrs.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ToggleButtonSample/ToggleButtonSample.iml b/ToggleButtonSample/ToggleButtonSample.iml
index 06f0945..34bff53 100644
--- a/ToggleButtonSample/ToggleButtonSample.iml
+++ b/ToggleButtonSample/ToggleButtonSample.iml
@@ -88,6 +88,6 @@
-
+
\ No newline at end of file
diff --git a/ToggleButtonSample/build.gradle b/ToggleButtonSample/build.gradle
index a53e80d..029df5a 100644
--- a/ToggleButtonSample/build.gradle
+++ b/ToggleButtonSample/build.gradle
@@ -1,7 +1,7 @@
apply plugin: 'com.android.application'
dependencies {
- compile project(':ToggleButtonLib')
+ compile project(':togglebutton')
}
android {
diff --git a/settings.gradle b/settings.gradle
index bece3c7..4001d3f 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,2 @@
-include 'ToggleButtonLib'
+include 'togglebutton'
include 'ToggleButtonSample'
diff --git a/ToggleButtonLib/bin/AndroidManifest.xml b/togglebutton/AndroidManifest.xml
similarity index 96%
rename from ToggleButtonLib/bin/AndroidManifest.xml
rename to togglebutton/AndroidManifest.xml
index 713f807..ca401fd 100644
--- a/ToggleButtonLib/bin/AndroidManifest.xml
+++ b/togglebutton/AndroidManifest.xml
@@ -1,10 +1,10 @@
-
-
-
-
-
+
+
+
+
+
diff --git a/ToggleButtonLib/build.gradle b/togglebutton/build.gradle
similarity index 100%
rename from ToggleButtonLib/build.gradle
rename to togglebutton/build.gradle
diff --git a/ToggleButtonLib/proguard-project.txt b/togglebutton/proguard-project.txt
similarity index 100%
rename from ToggleButtonLib/proguard-project.txt
rename to togglebutton/proguard-project.txt
diff --git a/ToggleButtonLib/project.properties b/togglebutton/project.properties
similarity index 100%
rename from ToggleButtonLib/project.properties
rename to togglebutton/project.properties
diff --git a/togglebutton/res/values/toggle_button_attrs.xml b/togglebutton/res/values/toggle_button_attrs.xml
new file mode 100644
index 0000000..53699d1
--- /dev/null
+++ b/togglebutton/res/values/toggle_button_attrs.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/ToggleButtonLib/src/com/facebook/rebound/AndroidSpringLooperFactory.java b/togglebutton/src/com/facebook/rebound/AndroidSpringLooperFactory.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/AndroidSpringLooperFactory.java
rename to togglebutton/src/com/facebook/rebound/AndroidSpringLooperFactory.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/BaseSpringSystem.java b/togglebutton/src/com/facebook/rebound/BaseSpringSystem.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/BaseSpringSystem.java
rename to togglebutton/src/com/facebook/rebound/BaseSpringSystem.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/OrigamiValueConverter.java b/togglebutton/src/com/facebook/rebound/OrigamiValueConverter.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/OrigamiValueConverter.java
rename to togglebutton/src/com/facebook/rebound/OrigamiValueConverter.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SimpleSpringListener.java b/togglebutton/src/com/facebook/rebound/SimpleSpringListener.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SimpleSpringListener.java
rename to togglebutton/src/com/facebook/rebound/SimpleSpringListener.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/Spring.java b/togglebutton/src/com/facebook/rebound/Spring.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/Spring.java
rename to togglebutton/src/com/facebook/rebound/Spring.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringConfig.java b/togglebutton/src/com/facebook/rebound/SpringConfig.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringConfig.java
rename to togglebutton/src/com/facebook/rebound/SpringConfig.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringConfigRegistry.java b/togglebutton/src/com/facebook/rebound/SpringConfigRegistry.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringConfigRegistry.java
rename to togglebutton/src/com/facebook/rebound/SpringConfigRegistry.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringListener.java b/togglebutton/src/com/facebook/rebound/SpringListener.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringListener.java
rename to togglebutton/src/com/facebook/rebound/SpringListener.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringLooper.java b/togglebutton/src/com/facebook/rebound/SpringLooper.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringLooper.java
rename to togglebutton/src/com/facebook/rebound/SpringLooper.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringSystem.java b/togglebutton/src/com/facebook/rebound/SpringSystem.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringSystem.java
rename to togglebutton/src/com/facebook/rebound/SpringSystem.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringSystemListener.java b/togglebutton/src/com/facebook/rebound/SpringSystemListener.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringSystemListener.java
rename to togglebutton/src/com/facebook/rebound/SpringSystemListener.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SpringUtil.java b/togglebutton/src/com/facebook/rebound/SpringUtil.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SpringUtil.java
rename to togglebutton/src/com/facebook/rebound/SpringUtil.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SteppingLooper.java b/togglebutton/src/com/facebook/rebound/SteppingLooper.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SteppingLooper.java
rename to togglebutton/src/com/facebook/rebound/SteppingLooper.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/SynchronousLooper.java b/togglebutton/src/com/facebook/rebound/SynchronousLooper.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/SynchronousLooper.java
rename to togglebutton/src/com/facebook/rebound/SynchronousLooper.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/ui/SpringConfiguratorView.java b/togglebutton/src/com/facebook/rebound/ui/SpringConfiguratorView.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/ui/SpringConfiguratorView.java
rename to togglebutton/src/com/facebook/rebound/ui/SpringConfiguratorView.java
diff --git a/ToggleButtonLib/src/com/facebook/rebound/ui/Util.java b/togglebutton/src/com/facebook/rebound/ui/Util.java
similarity index 100%
rename from ToggleButtonLib/src/com/facebook/rebound/ui/Util.java
rename to togglebutton/src/com/facebook/rebound/ui/Util.java
diff --git a/ToggleButtonLib/src/com/zcw/togglebutton/ToggleButton.java b/togglebutton/src/com/zcw/togglebutton/ToggleButton.java
similarity index 95%
rename from ToggleButtonLib/src/com/zcw/togglebutton/ToggleButton.java
rename to togglebutton/src/com/zcw/togglebutton/ToggleButton.java
index 81aaa60..8755ca6 100644
--- a/ToggleButtonLib/src/com/zcw/togglebutton/ToggleButton.java
+++ b/togglebutton/src/com/zcw/togglebutton/ToggleButton.java
@@ -106,13 +106,13 @@ public void onClick(View arg0) {
});
TypedArray typedArray = getContext().obtainStyledAttributes(attrs, R.styleable.ToggleButton);
- offBorderColor = typedArray.getColor(R.styleable.ToggleButton_offBorderColor, offBorderColor);
- onColor = typedArray.getColor(R.styleable.ToggleButton_onColor, onColor);
- spotColor = typedArray.getColor(R.styleable.ToggleButton_spotColor, spotColor);
- offColor = typedArray.getColor(R.styleable.ToggleButton_offColor, offColor);
- borderWidth = typedArray.getDimensionPixelSize(R.styleable.ToggleButton_borderWidth, borderWidth);
- defaultAnimate = typedArray.getBoolean(R.styleable.ToggleButton_animate, defaultAnimate);
- isDefaultOn = typedArray.getBoolean(R.styleable.ToggleButton_isDefaultOn, isDefaultOn);
+ offBorderColor = typedArray.getColor(R.styleable.ToggleButton_tbOffBorderColor, offBorderColor);
+ onColor = typedArray.getColor(R.styleable.ToggleButton_tbOnColor, onColor);
+ spotColor = typedArray.getColor(R.styleable.ToggleButton_tbSpotColor, spotColor);
+ offColor = typedArray.getColor(R.styleable.ToggleButton_tbOffColor, offColor);
+ borderWidth = typedArray.getDimensionPixelSize(R.styleable.ToggleButton_tbBorderWidth, borderWidth);
+ defaultAnimate = typedArray.getBoolean(R.styleable.ToggleButton_tbAnimate, defaultAnimate);
+ isDefaultOn = typedArray.getBoolean(R.styleable.ToggleButton_tbAsDefaultOn, isDefaultOn);
typedArray.recycle();
borderColor = offBorderColor;
diff --git a/ToggleButtonLib/ToggleButtonLib.iml b/togglebutton/togglebutton.iml
similarity index 95%
rename from ToggleButtonLib/ToggleButtonLib.iml
rename to togglebutton/togglebutton.iml
index 2664c51..6ac888e 100644
--- a/ToggleButtonLib/ToggleButtonLib.iml
+++ b/togglebutton/togglebutton.iml
@@ -1,9 +1,9 @@
-
+
-
+
@@ -60,14 +60,6 @@
-
-
-
-
-
-
-
-
@@ -76,6 +68,14 @@
+
+
+
+
+
+
+
+
From cccd74252a86047873597faf91f0da21ca1f072a Mon Sep 17 00:00:00 2001
From: ErQi <40307204@qq.com>
Date: Thu, 4 Aug 2016 10:56:42 +0800
Subject: [PATCH 05/16] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=A1=88=E4=BE=8B?=
=?UTF-8?q?=E7=95=8C=E9=9D=A2=E9=81=97=E6=BC=8F=E7=9A=84=E5=B1=9E=E6=80=A7?=
=?UTF-8?q?=E6=9B=B4=E6=94=B9?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ToggleButtonSample/ToggleButtonSample.iml | 4 +
.../res/layout/activity_main.xml | 73 +++++++++----------
2 files changed, 40 insertions(+), 37 deletions(-)
diff --git a/ToggleButtonSample/ToggleButtonSample.iml b/ToggleButtonSample/ToggleButtonSample.iml
index 34bff53..319d0cf 100644
--- a/ToggleButtonSample/ToggleButtonSample.iml
+++ b/ToggleButtonSample/ToggleButtonSample.iml
@@ -78,13 +78,17 @@
+
+
+
+
diff --git a/ToggleButtonSample/res/layout/activity_main.xml b/ToggleButtonSample/res/layout/activity_main.xml
index 546a525..ad83249 100644
--- a/ToggleButtonSample/res/layout/activity_main.xml
+++ b/ToggleButtonSample/res/layout/activity_main.xml
@@ -1,71 +1,70 @@
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ xmlns:toggle="http://schemas.android.com/apk/res-auto"
+ android:background="#fff"
+ android:orientation="vertical"
+ android:padding="20dp">
+ android:layout_height="wrap_content">
+ android:layout_height="30dp">
-
+
+ android:layout_height="30dp"
+ android:layout_marginLeft="20dp">
+ android:layout_height="wrap_content"
+ android:layout_marginTop="10dp">
+ android:layout_height="30dp"
+ toggle:tbBorderWidth="2dp"
+ toggle:tbOffBorderColor="#000"
+ toggle:tbOffColor="#ddd"
+ toggle:tbOnColor="#f00"
+ toggle:tbSpotColor="#00f">
-
+
+ android:layout_height="30dp"
+ android:layout_marginLeft="20dp"
+ toggle:tbBorderWidth="2dp"
+ toggle:tbOffBorderColor="#000"
+ toggle:tbOffColor="#ddd"
+ toggle:tbOnColor="#f00"
+ toggle:tbSpotColor="#00f">
-
-
-
+
+
+ android:layout_marginTop="10dp"/>
+ android:layout_marginTop="10dp"/>
-
+
From a2150d81fdd3150ca1e534e14116205ebabd3ccc Mon Sep 17 00:00:00 2001
From: ErQi <40307204@qq.com>
Date: Fri, 5 Aug 2016 14:08:55 +0800
Subject: [PATCH 06/16] =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E4=BA=86=E9=A1=B9?=
=?UTF-8?q?=E7=9B=AE=E5=90=8D=E7=A7=B0=E9=98=B2=E6=AD=A2=E9=87=8D=E5=90=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
README.md | 2 +-
ToggleButtonSample/ToggleButtonSample.iml | 26 ++++++++++++-------
ToggleButtonSample/build.gradle | 2 +-
settings.gradle | 2 +-
.../AndroidManifest.xml | 0
.../build.gradle | 0
.../proguard-project.txt | 0
.../project.properties | 0
.../res/values/toggle_button_attrs.xml | 0
.../rebound/AndroidSpringLooperFactory.java | 0
.../facebook/rebound/BaseSpringSystem.java | 0
.../rebound/OrigamiValueConverter.java | 0
.../rebound/SimpleSpringListener.java | 0
.../src/com/facebook/rebound/Spring.java | 0
.../com/facebook/rebound/SpringConfig.java | 0
.../rebound/SpringConfigRegistry.java | 0
.../com/facebook/rebound/SpringListener.java | 0
.../com/facebook/rebound/SpringLooper.java | 0
.../com/facebook/rebound/SpringSystem.java | 0
.../rebound/SpringSystemListener.java | 0
.../src/com/facebook/rebound/SpringUtil.java | 0
.../com/facebook/rebound/SteppingLooper.java | 0
.../facebook/rebound/SynchronousLooper.java | 0
.../rebound/ui/SpringConfiguratorView.java | 0
.../src/com/facebook/rebound/ui/Util.java | 0
.../com/zcw/togglebutton/ToggleButton.java | 0
.../togglebutton-library.iml | 20 +++++++-------
27 files changed, 30 insertions(+), 22 deletions(-)
rename {togglebutton => togglebutton-library}/AndroidManifest.xml (100%)
rename {togglebutton => togglebutton-library}/build.gradle (100%)
rename {togglebutton => togglebutton-library}/proguard-project.txt (100%)
rename {togglebutton => togglebutton-library}/project.properties (100%)
rename {togglebutton => togglebutton-library}/res/values/toggle_button_attrs.xml (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/AndroidSpringLooperFactory.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/BaseSpringSystem.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/OrigamiValueConverter.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SimpleSpringListener.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/Spring.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringConfig.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringConfigRegistry.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringListener.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringLooper.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringSystem.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringSystemListener.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SpringUtil.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SteppingLooper.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/SynchronousLooper.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/ui/SpringConfiguratorView.java (100%)
rename {togglebutton => togglebutton-library}/src/com/facebook/rebound/ui/Util.java (100%)
rename {togglebutton => togglebutton-library}/src/com/zcw/togglebutton/ToggleButton.java (100%)
rename togglebutton/togglebutton.iml => togglebutton-library/togglebutton-library.iml (95%)
diff --git a/README.md b/README.md
index 79e3627..d6d5144 100644
--- a/README.md
+++ b/README.md
@@ -52,5 +52,5 @@ Default Size:width=50dp,height=30dp.
引用方式
```
2016/8/3 17:04:53
-compile 'com.zcw:togglebuttonlib:1.0.0'
+compile 'com.zcw:togglebutton-library:1.0.0'
```
\ No newline at end of file
diff --git a/ToggleButtonSample/ToggleButtonSample.iml b/ToggleButtonSample/ToggleButtonSample.iml
index 319d0cf..8c6e68e 100644
--- a/ToggleButtonSample/ToggleButtonSample.iml
+++ b/ToggleButtonSample/ToggleButtonSample.iml
@@ -59,14 +59,6 @@
-
-
-
-
-
-
-
-
@@ -75,23 +67,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
\ No newline at end of file
diff --git a/ToggleButtonSample/build.gradle b/ToggleButtonSample/build.gradle
index 029df5a..3e7cb51 100644
--- a/ToggleButtonSample/build.gradle
+++ b/ToggleButtonSample/build.gradle
@@ -1,7 +1,7 @@
apply plugin: 'com.android.application'
dependencies {
- compile project(':togglebutton')
+ compile project(':togglebutton-library')
}
android {
diff --git a/settings.gradle b/settings.gradle
index 4001d3f..cde7724 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1,2 @@
-include 'togglebutton'
+include 'togglebutton-library'
include 'ToggleButtonSample'
diff --git a/togglebutton/AndroidManifest.xml b/togglebutton-library/AndroidManifest.xml
similarity index 100%
rename from togglebutton/AndroidManifest.xml
rename to togglebutton-library/AndroidManifest.xml
diff --git a/togglebutton/build.gradle b/togglebutton-library/build.gradle
similarity index 100%
rename from togglebutton/build.gradle
rename to togglebutton-library/build.gradle
diff --git a/togglebutton/proguard-project.txt b/togglebutton-library/proguard-project.txt
similarity index 100%
rename from togglebutton/proguard-project.txt
rename to togglebutton-library/proguard-project.txt
diff --git a/togglebutton/project.properties b/togglebutton-library/project.properties
similarity index 100%
rename from togglebutton/project.properties
rename to togglebutton-library/project.properties
diff --git a/togglebutton/res/values/toggle_button_attrs.xml b/togglebutton-library/res/values/toggle_button_attrs.xml
similarity index 100%
rename from togglebutton/res/values/toggle_button_attrs.xml
rename to togglebutton-library/res/values/toggle_button_attrs.xml
diff --git a/togglebutton/src/com/facebook/rebound/AndroidSpringLooperFactory.java b/togglebutton-library/src/com/facebook/rebound/AndroidSpringLooperFactory.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/AndroidSpringLooperFactory.java
rename to togglebutton-library/src/com/facebook/rebound/AndroidSpringLooperFactory.java
diff --git a/togglebutton/src/com/facebook/rebound/BaseSpringSystem.java b/togglebutton-library/src/com/facebook/rebound/BaseSpringSystem.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/BaseSpringSystem.java
rename to togglebutton-library/src/com/facebook/rebound/BaseSpringSystem.java
diff --git a/togglebutton/src/com/facebook/rebound/OrigamiValueConverter.java b/togglebutton-library/src/com/facebook/rebound/OrigamiValueConverter.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/OrigamiValueConverter.java
rename to togglebutton-library/src/com/facebook/rebound/OrigamiValueConverter.java
diff --git a/togglebutton/src/com/facebook/rebound/SimpleSpringListener.java b/togglebutton-library/src/com/facebook/rebound/SimpleSpringListener.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SimpleSpringListener.java
rename to togglebutton-library/src/com/facebook/rebound/SimpleSpringListener.java
diff --git a/togglebutton/src/com/facebook/rebound/Spring.java b/togglebutton-library/src/com/facebook/rebound/Spring.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/Spring.java
rename to togglebutton-library/src/com/facebook/rebound/Spring.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringConfig.java b/togglebutton-library/src/com/facebook/rebound/SpringConfig.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringConfig.java
rename to togglebutton-library/src/com/facebook/rebound/SpringConfig.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringConfigRegistry.java b/togglebutton-library/src/com/facebook/rebound/SpringConfigRegistry.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringConfigRegistry.java
rename to togglebutton-library/src/com/facebook/rebound/SpringConfigRegistry.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringListener.java b/togglebutton-library/src/com/facebook/rebound/SpringListener.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringListener.java
rename to togglebutton-library/src/com/facebook/rebound/SpringListener.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringLooper.java b/togglebutton-library/src/com/facebook/rebound/SpringLooper.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringLooper.java
rename to togglebutton-library/src/com/facebook/rebound/SpringLooper.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringSystem.java b/togglebutton-library/src/com/facebook/rebound/SpringSystem.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringSystem.java
rename to togglebutton-library/src/com/facebook/rebound/SpringSystem.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringSystemListener.java b/togglebutton-library/src/com/facebook/rebound/SpringSystemListener.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringSystemListener.java
rename to togglebutton-library/src/com/facebook/rebound/SpringSystemListener.java
diff --git a/togglebutton/src/com/facebook/rebound/SpringUtil.java b/togglebutton-library/src/com/facebook/rebound/SpringUtil.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SpringUtil.java
rename to togglebutton-library/src/com/facebook/rebound/SpringUtil.java
diff --git a/togglebutton/src/com/facebook/rebound/SteppingLooper.java b/togglebutton-library/src/com/facebook/rebound/SteppingLooper.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SteppingLooper.java
rename to togglebutton-library/src/com/facebook/rebound/SteppingLooper.java
diff --git a/togglebutton/src/com/facebook/rebound/SynchronousLooper.java b/togglebutton-library/src/com/facebook/rebound/SynchronousLooper.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/SynchronousLooper.java
rename to togglebutton-library/src/com/facebook/rebound/SynchronousLooper.java
diff --git a/togglebutton/src/com/facebook/rebound/ui/SpringConfiguratorView.java b/togglebutton-library/src/com/facebook/rebound/ui/SpringConfiguratorView.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/ui/SpringConfiguratorView.java
rename to togglebutton-library/src/com/facebook/rebound/ui/SpringConfiguratorView.java
diff --git a/togglebutton/src/com/facebook/rebound/ui/Util.java b/togglebutton-library/src/com/facebook/rebound/ui/Util.java
similarity index 100%
rename from togglebutton/src/com/facebook/rebound/ui/Util.java
rename to togglebutton-library/src/com/facebook/rebound/ui/Util.java
diff --git a/togglebutton/src/com/zcw/togglebutton/ToggleButton.java b/togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java
similarity index 100%
rename from togglebutton/src/com/zcw/togglebutton/ToggleButton.java
rename to togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java
diff --git a/togglebutton/togglebutton.iml b/togglebutton-library/togglebutton-library.iml
similarity index 95%
rename from togglebutton/togglebutton.iml
rename to togglebutton-library/togglebutton-library.iml
index 6ac888e..6ae3edb 100644
--- a/togglebutton/togglebutton.iml
+++ b/togglebutton-library/togglebutton-library.iml
@@ -1,9 +1,9 @@
-
+
-
+
@@ -60,14 +60,6 @@
-
-
-
-
-
-
-
-
@@ -76,6 +68,14 @@
+
+
+
+
+
+
+
+
From 9bb4a68447eb13d07f4924322efd1044ca29d3f8 Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Sun, 4 Sep 2016 10:37:11 +0800
Subject: [PATCH 07/16] Remove the generated project local configuration files.
---
.gitignore | 4 +
ToggleButtonSample/ToggleButtonSample.iml | 105 ------------------
togglebutton-library/togglebutton-library.iml | 102 -----------------
3 files changed, 4 insertions(+), 207 deletions(-)
delete mode 100644 ToggleButtonSample/ToggleButtonSample.iml
delete mode 100644 togglebutton-library/togglebutton-library.iml
diff --git a/.gitignore b/.gitignore
index f9e9ca8..101d97c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,7 @@ build/
.gradle/
local.properties
+
+#Idea
+*.iml
+/.idea
diff --git a/ToggleButtonSample/ToggleButtonSample.iml b/ToggleButtonSample/ToggleButtonSample.iml
deleted file mode 100644
index 8c6e68e..0000000
--- a/ToggleButtonSample/ToggleButtonSample.iml
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/togglebutton-library/togglebutton-library.iml b/togglebutton-library/togglebutton-library.iml
deleted file mode 100644
index 6ae3edb..0000000
--- a/togglebutton-library/togglebutton-library.iml
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
From fdc4fc66f20c330c0e5f87c9b6f3aca8c1135aea Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Fri, 16 Sep 2016 10:33:00 +0800
Subject: [PATCH 08/16] Add isToggleOn() method to get the toggle state
---
.../src/com/zcw/togglebutton/ToggleButton.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java b/togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java
index 8755ca6..b13fb6d 100644
--- a/togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java
+++ b/togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java
@@ -148,7 +148,11 @@ public void toggleOff() {
listener.onToggle(toggleOn);
}
}
-
+
+ public boolean isToggleOn() {
+ return toggleOn;
+ }
+
/**
* 设置显示成打开样式,不会触发toggle事件
*/
From 16a624dc93c02a2dcac2518ce3b2cb1d886ce0f4 Mon Sep 17 00:00:00 2001
From: zhou XX <690650133@qq.com>
Date: Tue, 13 Dec 2016 23:38:14 +0800
Subject: [PATCH 09/16] Create LICENSE
MIT LICENSE
---
LICENSE | 8 ++++++++
1 file changed, 8 insertions(+)
create mode 100644 LICENSE
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..bc6ee53
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,8 @@
+The MIT License (MIT)
+Copyright (c)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
From e9ea6eb747938ac2d0530e3d7db3e2ada0f1aa56 Mon Sep 17 00:00:00 2001
From: zhou XX <690650133@qq.com>
Date: Tue, 13 Dec 2016 23:40:04 +0800
Subject: [PATCH 10/16] Update LICENSE
---
LICENSE | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/LICENSE b/LICENSE
index bc6ee53..3813ca9 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,5 +1,5 @@
The MIT License (MIT)
-Copyright (c)
+Copyright (c) 2016 ToggleButton
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
From b899083f50196480b7e10febeeaf52252e0ba084 Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Sat, 24 Sep 2016 20:03:46 +0800
Subject: [PATCH 11/16] Migrate to Android gradle project struture
---
ToggleButtonSample/bin/AndroidManifest.xml | 26 ------------------
ToggleButtonSample/bin/R.txt | 19 -------------
ToggleButtonSample/bin/classes/.gitignore | 2 --
ToggleButtonSample/bin/jarlist.cache | 3 --
ToggleButtonSample/build.gradle | 12 --------
ToggleButtonSample/gen/.gitignore | 2 --
.../{ => src/main}/AndroidManifest.xml | 0
.../zcw/togglebutton/sample/MainActivity.java | 0
.../main}/res/drawable-hdpi/ic_launcher.png | Bin
.../main}/res/drawable-mdpi/ic_launcher.png | Bin
.../main}/res/drawable-xhdpi/ic_launcher.png | Bin
.../main}/res/drawable-xxhdpi/ic_launcher.png | Bin
.../main}/res/layout/activity_main.xml | 0
.../main}/res/values-w820dp/dimens.xml | 0
.../{ => src/main}/res/values/dimens.xml | 0
.../{ => src/main}/res/values/strings.xml | 0
.../{ => src/main}/res/values/styles.xml | 0
togglebutton-library/build.gradle | 12 --------
.../{ => src/main}/AndroidManifest.xml | 0
.../rebound/AndroidSpringLooperFactory.java | 0
.../facebook/rebound/BaseSpringSystem.java | 0
.../rebound/OrigamiValueConverter.java | 0
.../rebound/SimpleSpringListener.java | 0
.../java}/com/facebook/rebound/Spring.java | 0
.../com/facebook/rebound/SpringConfig.java | 0
.../rebound/SpringConfigRegistry.java | 0
.../com/facebook/rebound/SpringListener.java | 0
.../com/facebook/rebound/SpringLooper.java | 0
.../com/facebook/rebound/SpringSystem.java | 0
.../rebound/SpringSystemListener.java | 0
.../com/facebook/rebound/SpringUtil.java | 0
.../com/facebook/rebound/SteppingLooper.java | 0
.../facebook/rebound/SynchronousLooper.java | 0
.../rebound/ui/SpringConfiguratorView.java | 0
.../java}/com/facebook/rebound/ui/Util.java | 0
.../com/zcw/togglebutton/ToggleButton.java | 0
.../main}/res/values/toggle_button_attrs.xml | 0
37 files changed, 76 deletions(-)
delete mode 100644 ToggleButtonSample/bin/AndroidManifest.xml
delete mode 100644 ToggleButtonSample/bin/R.txt
delete mode 100644 ToggleButtonSample/bin/classes/.gitignore
delete mode 100644 ToggleButtonSample/bin/jarlist.cache
delete mode 100644 ToggleButtonSample/gen/.gitignore
rename ToggleButtonSample/{ => src/main}/AndroidManifest.xml (100%)
rename ToggleButtonSample/src/{ => main/java}/com/zcw/togglebutton/sample/MainActivity.java (100%)
rename ToggleButtonSample/{ => src/main}/res/drawable-hdpi/ic_launcher.png (100%)
rename ToggleButtonSample/{ => src/main}/res/drawable-mdpi/ic_launcher.png (100%)
rename ToggleButtonSample/{ => src/main}/res/drawable-xhdpi/ic_launcher.png (100%)
rename ToggleButtonSample/{ => src/main}/res/drawable-xxhdpi/ic_launcher.png (100%)
rename ToggleButtonSample/{ => src/main}/res/layout/activity_main.xml (100%)
rename ToggleButtonSample/{ => src/main}/res/values-w820dp/dimens.xml (100%)
rename ToggleButtonSample/{ => src/main}/res/values/dimens.xml (100%)
rename ToggleButtonSample/{ => src/main}/res/values/strings.xml (100%)
rename ToggleButtonSample/{ => src/main}/res/values/styles.xml (100%)
rename togglebutton-library/{ => src/main}/AndroidManifest.xml (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/AndroidSpringLooperFactory.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/BaseSpringSystem.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/OrigamiValueConverter.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SimpleSpringListener.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/Spring.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringConfig.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringConfigRegistry.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringListener.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringLooper.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringSystem.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringSystemListener.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SpringUtil.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SteppingLooper.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/SynchronousLooper.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/ui/SpringConfiguratorView.java (100%)
rename togglebutton-library/src/{ => main/java}/com/facebook/rebound/ui/Util.java (100%)
rename togglebutton-library/src/{ => main/java}/com/zcw/togglebutton/ToggleButton.java (100%)
rename togglebutton-library/{ => src/main}/res/values/toggle_button_attrs.xml (100%)
diff --git a/ToggleButtonSample/bin/AndroidManifest.xml b/ToggleButtonSample/bin/AndroidManifest.xml
deleted file mode 100644
index 00109c3..0000000
--- a/ToggleButtonSample/bin/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/ToggleButtonSample/bin/R.txt b/ToggleButtonSample/bin/R.txt
deleted file mode 100644
index 5e63fb9..0000000
--- a/ToggleButtonSample/bin/R.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-int attr borderWidth 0x7f010000
-int attr offBorderColor 0x7f010001
-int attr offColor 0x7f010002
-int attr onColor 0x7f010003
-int attr spotColor 0x7f010004
-int dimen activity_horizontal_margin 0x7f040000
-int dimen activity_vertical_margin 0x7f040001
-int drawable ic_launcher 0x7f020000
-int id group1 0x7f060000
-int layout activity_main 0x7f030000
-int string action_settings 0x7f050002
-int string app_name 0x7f050000
-int string hello_world 0x7f050001
-int[] styleable ToggleButton { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003, 0x7f010004 }
-int styleable ToggleButton_borderWidth 0
-int styleable ToggleButton_offBorderColor 1
-int styleable ToggleButton_offColor 2
-int styleable ToggleButton_onColor 3
-int styleable ToggleButton_spotColor 4
diff --git a/ToggleButtonSample/bin/classes/.gitignore b/ToggleButtonSample/bin/classes/.gitignore
deleted file mode 100644
index 4651645..0000000
--- a/ToggleButtonSample/bin/classes/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/com/
-/.gitignore
diff --git a/ToggleButtonSample/bin/jarlist.cache b/ToggleButtonSample/bin/jarlist.cache
deleted file mode 100644
index 0565465..0000000
--- a/ToggleButtonSample/bin/jarlist.cache
+++ /dev/null
@@ -1,3 +0,0 @@
-# cache for current jar dependency. DO NOT EDIT.
-# format is
-# Encoding is UTF-8
diff --git a/ToggleButtonSample/build.gradle b/ToggleButtonSample/build.gradle
index 3e7cb51..d012905 100644
--- a/ToggleButtonSample/build.gradle
+++ b/ToggleButtonSample/build.gradle
@@ -18,18 +18,6 @@ android {
targetSdkVersion 22
}
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
- }
-
lintOptions {
abortOnError false
}
diff --git a/ToggleButtonSample/gen/.gitignore b/ToggleButtonSample/gen/.gitignore
deleted file mode 100644
index 4651645..0000000
--- a/ToggleButtonSample/gen/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/com/
-/.gitignore
diff --git a/ToggleButtonSample/AndroidManifest.xml b/ToggleButtonSample/src/main/AndroidManifest.xml
similarity index 100%
rename from ToggleButtonSample/AndroidManifest.xml
rename to ToggleButtonSample/src/main/AndroidManifest.xml
diff --git a/ToggleButtonSample/src/com/zcw/togglebutton/sample/MainActivity.java b/ToggleButtonSample/src/main/java/com/zcw/togglebutton/sample/MainActivity.java
similarity index 100%
rename from ToggleButtonSample/src/com/zcw/togglebutton/sample/MainActivity.java
rename to ToggleButtonSample/src/main/java/com/zcw/togglebutton/sample/MainActivity.java
diff --git a/ToggleButtonSample/res/drawable-hdpi/ic_launcher.png b/ToggleButtonSample/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/res/drawable-hdpi/ic_launcher.png
rename to ToggleButtonSample/src/main/res/drawable-hdpi/ic_launcher.png
diff --git a/ToggleButtonSample/res/drawable-mdpi/ic_launcher.png b/ToggleButtonSample/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/res/drawable-mdpi/ic_launcher.png
rename to ToggleButtonSample/src/main/res/drawable-mdpi/ic_launcher.png
diff --git a/ToggleButtonSample/res/drawable-xhdpi/ic_launcher.png b/ToggleButtonSample/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/res/drawable-xhdpi/ic_launcher.png
rename to ToggleButtonSample/src/main/res/drawable-xhdpi/ic_launcher.png
diff --git a/ToggleButtonSample/res/drawable-xxhdpi/ic_launcher.png b/ToggleButtonSample/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/res/drawable-xxhdpi/ic_launcher.png
rename to ToggleButtonSample/src/main/res/drawable-xxhdpi/ic_launcher.png
diff --git a/ToggleButtonSample/res/layout/activity_main.xml b/ToggleButtonSample/src/main/res/layout/activity_main.xml
similarity index 100%
rename from ToggleButtonSample/res/layout/activity_main.xml
rename to ToggleButtonSample/src/main/res/layout/activity_main.xml
diff --git a/ToggleButtonSample/res/values-w820dp/dimens.xml b/ToggleButtonSample/src/main/res/values-w820dp/dimens.xml
similarity index 100%
rename from ToggleButtonSample/res/values-w820dp/dimens.xml
rename to ToggleButtonSample/src/main/res/values-w820dp/dimens.xml
diff --git a/ToggleButtonSample/res/values/dimens.xml b/ToggleButtonSample/src/main/res/values/dimens.xml
similarity index 100%
rename from ToggleButtonSample/res/values/dimens.xml
rename to ToggleButtonSample/src/main/res/values/dimens.xml
diff --git a/ToggleButtonSample/res/values/strings.xml b/ToggleButtonSample/src/main/res/values/strings.xml
similarity index 100%
rename from ToggleButtonSample/res/values/strings.xml
rename to ToggleButtonSample/src/main/res/values/strings.xml
diff --git a/ToggleButtonSample/res/values/styles.xml b/ToggleButtonSample/src/main/res/values/styles.xml
similarity index 100%
rename from ToggleButtonSample/res/values/styles.xml
rename to ToggleButtonSample/src/main/res/values/styles.xml
diff --git a/togglebutton-library/build.gradle b/togglebutton-library/build.gradle
index e5285fc..0185d70 100644
--- a/togglebutton-library/build.gradle
+++ b/togglebutton-library/build.gradle
@@ -18,18 +18,6 @@ android {
minSdkVersion 8
targetSdkVersion 22
}
-
- sourceSets {
- main {
- manifest.srcFile 'AndroidManifest.xml'
- java.srcDirs = ['src']
- resources.srcDirs = ['src']
- aidl.srcDirs = ['src']
- renderscript.srcDirs = ['src']
- res.srcDirs = ['res']
- assets.srcDirs = ['assets']
- }
- }
}
diff --git a/togglebutton-library/AndroidManifest.xml b/togglebutton-library/src/main/AndroidManifest.xml
similarity index 100%
rename from togglebutton-library/AndroidManifest.xml
rename to togglebutton-library/src/main/AndroidManifest.xml
diff --git a/togglebutton-library/src/com/facebook/rebound/AndroidSpringLooperFactory.java b/togglebutton-library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/AndroidSpringLooperFactory.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
diff --git a/togglebutton-library/src/com/facebook/rebound/BaseSpringSystem.java b/togglebutton-library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/BaseSpringSystem.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
diff --git a/togglebutton-library/src/com/facebook/rebound/OrigamiValueConverter.java b/togglebutton-library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/OrigamiValueConverter.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SimpleSpringListener.java b/togglebutton-library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SimpleSpringListener.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
diff --git a/togglebutton-library/src/com/facebook/rebound/Spring.java b/togglebutton-library/src/main/java/com/facebook/rebound/Spring.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/Spring.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/Spring.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringConfig.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringConfig.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringConfig.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringConfig.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringConfigRegistry.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringConfigRegistry.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringListener.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringListener.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringListener.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringListener.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringLooper.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringLooper.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringLooper.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringLooper.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringSystem.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringSystem.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringSystem.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringSystem.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringSystemListener.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringSystemListener.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringSystemListener.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringSystemListener.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SpringUtil.java b/togglebutton-library/src/main/java/com/facebook/rebound/SpringUtil.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SpringUtil.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SpringUtil.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SteppingLooper.java b/togglebutton-library/src/main/java/com/facebook/rebound/SteppingLooper.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SteppingLooper.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SteppingLooper.java
diff --git a/togglebutton-library/src/com/facebook/rebound/SynchronousLooper.java b/togglebutton-library/src/main/java/com/facebook/rebound/SynchronousLooper.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/SynchronousLooper.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/SynchronousLooper.java
diff --git a/togglebutton-library/src/com/facebook/rebound/ui/SpringConfiguratorView.java b/togglebutton-library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/ui/SpringConfiguratorView.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
diff --git a/togglebutton-library/src/com/facebook/rebound/ui/Util.java b/togglebutton-library/src/main/java/com/facebook/rebound/ui/Util.java
similarity index 100%
rename from togglebutton-library/src/com/facebook/rebound/ui/Util.java
rename to togglebutton-library/src/main/java/com/facebook/rebound/ui/Util.java
diff --git a/togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java b/togglebutton-library/src/main/java/com/zcw/togglebutton/ToggleButton.java
similarity index 100%
rename from togglebutton-library/src/com/zcw/togglebutton/ToggleButton.java
rename to togglebutton-library/src/main/java/com/zcw/togglebutton/ToggleButton.java
diff --git a/togglebutton-library/res/values/toggle_button_attrs.xml b/togglebutton-library/src/main/res/values/toggle_button_attrs.xml
similarity index 100%
rename from togglebutton-library/res/values/toggle_button_attrs.xml
rename to togglebutton-library/src/main/res/values/toggle_button_attrs.xml
From 24c706592c939702d06bb7669f302c055abeea2e Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Sat, 24 Sep 2016 20:06:28 +0800
Subject: [PATCH 12/16] Rename the modules
---
ToggleButtonSample/.classpath | 9 -----
ToggleButtonSample/.project | 33 ------------------
.../.settings/org.eclipse.jdt.core.prefs | 4 ---
.../build.gradle | 0
.../proguard-project.txt | 0
.../project.properties | 0
.../src/main/AndroidManifest.xml | 0
.../rebound/AndroidSpringLooperFactory.java | 0
.../facebook/rebound/BaseSpringSystem.java | 0
.../rebound/OrigamiValueConverter.java | 0
.../rebound/SimpleSpringListener.java | 0
.../java/com/facebook/rebound/Spring.java | 0
.../com/facebook/rebound/SpringConfig.java | 0
.../rebound/SpringConfigRegistry.java | 0
.../com/facebook/rebound/SpringListener.java | 0
.../com/facebook/rebound/SpringLooper.java | 0
.../com/facebook/rebound/SpringSystem.java | 0
.../rebound/SpringSystemListener.java | 0
.../java/com/facebook/rebound/SpringUtil.java | 0
.../com/facebook/rebound/SteppingLooper.java | 0
.../facebook/rebound/SynchronousLooper.java | 0
.../rebound/ui/SpringConfiguratorView.java | 0
.../java/com/facebook/rebound/ui/Util.java | 0
.../com/zcw/togglebutton/ToggleButton.java | 0
.../main/res/values/toggle_button_attrs.xml | 0
{ToggleButtonSample => sample}/21879.gif | Bin
{ToggleButtonSample => sample}/build.gradle | 2 +-
.../device-2014-08-31-231538.png | Bin
.../ic_launcher-web.png | Bin
.../libs/android-support-v4.jar | Bin
{ToggleButtonSample => sample}/lint.xml | 0
.../proguard-project.txt | 0
.../project.properties | 0
.../src/main/AndroidManifest.xml | 0
.../zcw/togglebutton/sample/MainActivity.java | 0
.../main/res/drawable-hdpi/ic_launcher.png | Bin
.../main/res/drawable-mdpi/ic_launcher.png | Bin
.../main/res/drawable-xhdpi/ic_launcher.png | Bin
.../main/res/drawable-xxhdpi/ic_launcher.png | Bin
.../src/main/res/layout/activity_main.xml | 0
.../src/main/res/values-w820dp/dimens.xml | 0
.../src/main/res/values/dimens.xml | 0
.../src/main/res/values/strings.xml | 0
.../src/main/res/values/styles.xml | 0
settings.gradle | 3 +-
45 files changed, 2 insertions(+), 49 deletions(-)
delete mode 100644 ToggleButtonSample/.classpath
delete mode 100644 ToggleButtonSample/.project
delete mode 100644 ToggleButtonSample/.settings/org.eclipse.jdt.core.prefs
rename {togglebutton-library => library}/build.gradle (100%)
rename {ToggleButtonSample => library}/proguard-project.txt (100%)
rename {togglebutton-library => library}/project.properties (100%)
rename {togglebutton-library => library}/src/main/AndroidManifest.xml (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/BaseSpringSystem.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/OrigamiValueConverter.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SimpleSpringListener.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/Spring.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringConfig.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringConfigRegistry.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringListener.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringLooper.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringSystem.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringSystemListener.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SpringUtil.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SteppingLooper.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/SynchronousLooper.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java (100%)
rename {togglebutton-library => library}/src/main/java/com/facebook/rebound/ui/Util.java (100%)
rename {togglebutton-library => library}/src/main/java/com/zcw/togglebutton/ToggleButton.java (100%)
rename {togglebutton-library => library}/src/main/res/values/toggle_button_attrs.xml (100%)
rename {ToggleButtonSample => sample}/21879.gif (100%)
rename {ToggleButtonSample => sample}/build.gradle (89%)
rename {ToggleButtonSample => sample}/device-2014-08-31-231538.png (100%)
rename {ToggleButtonSample => sample}/ic_launcher-web.png (100%)
rename {ToggleButtonSample => sample}/libs/android-support-v4.jar (100%)
rename {ToggleButtonSample => sample}/lint.xml (100%)
rename {togglebutton-library => sample}/proguard-project.txt (100%)
rename {ToggleButtonSample => sample}/project.properties (100%)
rename {ToggleButtonSample => sample}/src/main/AndroidManifest.xml (100%)
rename {ToggleButtonSample => sample}/src/main/java/com/zcw/togglebutton/sample/MainActivity.java (100%)
rename {ToggleButtonSample => sample}/src/main/res/drawable-hdpi/ic_launcher.png (100%)
rename {ToggleButtonSample => sample}/src/main/res/drawable-mdpi/ic_launcher.png (100%)
rename {ToggleButtonSample => sample}/src/main/res/drawable-xhdpi/ic_launcher.png (100%)
rename {ToggleButtonSample => sample}/src/main/res/drawable-xxhdpi/ic_launcher.png (100%)
rename {ToggleButtonSample => sample}/src/main/res/layout/activity_main.xml (100%)
rename {ToggleButtonSample => sample}/src/main/res/values-w820dp/dimens.xml (100%)
rename {ToggleButtonSample => sample}/src/main/res/values/dimens.xml (100%)
rename {ToggleButtonSample => sample}/src/main/res/values/strings.xml (100%)
rename {ToggleButtonSample => sample}/src/main/res/values/styles.xml (100%)
diff --git a/ToggleButtonSample/.classpath b/ToggleButtonSample/.classpath
deleted file mode 100644
index 7bc01d9..0000000
--- a/ToggleButtonSample/.classpath
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/ToggleButtonSample/.project b/ToggleButtonSample/.project
deleted file mode 100644
index c11c0fe..0000000
--- a/ToggleButtonSample/.project
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
- ToggleButtonSample
-
-
-
-
-
- com.android.ide.eclipse.adt.ResourceManagerBuilder
-
-
-
-
- com.android.ide.eclipse.adt.PreCompilerBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- com.android.ide.eclipse.adt.ApkBuilder
-
-
-
-
-
- com.android.ide.eclipse.adt.AndroidNature
- org.eclipse.jdt.core.javanature
-
-
diff --git a/ToggleButtonSample/.settings/org.eclipse.jdt.core.prefs b/ToggleButtonSample/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index b080d2d..0000000
--- a/ToggleButtonSample/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,4 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/togglebutton-library/build.gradle b/library/build.gradle
similarity index 100%
rename from togglebutton-library/build.gradle
rename to library/build.gradle
diff --git a/ToggleButtonSample/proguard-project.txt b/library/proguard-project.txt
similarity index 100%
rename from ToggleButtonSample/proguard-project.txt
rename to library/proguard-project.txt
diff --git a/togglebutton-library/project.properties b/library/project.properties
similarity index 100%
rename from togglebutton-library/project.properties
rename to library/project.properties
diff --git a/togglebutton-library/src/main/AndroidManifest.xml b/library/src/main/AndroidManifest.xml
similarity index 100%
rename from togglebutton-library/src/main/AndroidManifest.xml
rename to library/src/main/AndroidManifest.xml
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java b/library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
rename to library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/BaseSpringSystem.java b/library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
rename to library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java b/library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
rename to library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SimpleSpringListener.java b/library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
rename to library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/Spring.java b/library/src/main/java/com/facebook/rebound/Spring.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/Spring.java
rename to library/src/main/java/com/facebook/rebound/Spring.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringConfig.java b/library/src/main/java/com/facebook/rebound/SpringConfig.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringConfig.java
rename to library/src/main/java/com/facebook/rebound/SpringConfig.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java b/library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
rename to library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringListener.java b/library/src/main/java/com/facebook/rebound/SpringListener.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringListener.java
rename to library/src/main/java/com/facebook/rebound/SpringListener.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringLooper.java b/library/src/main/java/com/facebook/rebound/SpringLooper.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringLooper.java
rename to library/src/main/java/com/facebook/rebound/SpringLooper.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringSystem.java b/library/src/main/java/com/facebook/rebound/SpringSystem.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringSystem.java
rename to library/src/main/java/com/facebook/rebound/SpringSystem.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringSystemListener.java b/library/src/main/java/com/facebook/rebound/SpringSystemListener.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringSystemListener.java
rename to library/src/main/java/com/facebook/rebound/SpringSystemListener.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SpringUtil.java b/library/src/main/java/com/facebook/rebound/SpringUtil.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SpringUtil.java
rename to library/src/main/java/com/facebook/rebound/SpringUtil.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SteppingLooper.java b/library/src/main/java/com/facebook/rebound/SteppingLooper.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SteppingLooper.java
rename to library/src/main/java/com/facebook/rebound/SteppingLooper.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/SynchronousLooper.java b/library/src/main/java/com/facebook/rebound/SynchronousLooper.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/SynchronousLooper.java
rename to library/src/main/java/com/facebook/rebound/SynchronousLooper.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java b/library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
rename to library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
diff --git a/togglebutton-library/src/main/java/com/facebook/rebound/ui/Util.java b/library/src/main/java/com/facebook/rebound/ui/Util.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/facebook/rebound/ui/Util.java
rename to library/src/main/java/com/facebook/rebound/ui/Util.java
diff --git a/togglebutton-library/src/main/java/com/zcw/togglebutton/ToggleButton.java b/library/src/main/java/com/zcw/togglebutton/ToggleButton.java
similarity index 100%
rename from togglebutton-library/src/main/java/com/zcw/togglebutton/ToggleButton.java
rename to library/src/main/java/com/zcw/togglebutton/ToggleButton.java
diff --git a/togglebutton-library/src/main/res/values/toggle_button_attrs.xml b/library/src/main/res/values/toggle_button_attrs.xml
similarity index 100%
rename from togglebutton-library/src/main/res/values/toggle_button_attrs.xml
rename to library/src/main/res/values/toggle_button_attrs.xml
diff --git a/ToggleButtonSample/21879.gif b/sample/21879.gif
similarity index 100%
rename from ToggleButtonSample/21879.gif
rename to sample/21879.gif
diff --git a/ToggleButtonSample/build.gradle b/sample/build.gradle
similarity index 89%
rename from ToggleButtonSample/build.gradle
rename to sample/build.gradle
index d012905..10c33c8 100644
--- a/ToggleButtonSample/build.gradle
+++ b/sample/build.gradle
@@ -1,7 +1,7 @@
apply plugin: 'com.android.application'
dependencies {
- compile project(':togglebutton-library')
+ compile project(':library')
}
android {
diff --git a/ToggleButtonSample/device-2014-08-31-231538.png b/sample/device-2014-08-31-231538.png
similarity index 100%
rename from ToggleButtonSample/device-2014-08-31-231538.png
rename to sample/device-2014-08-31-231538.png
diff --git a/ToggleButtonSample/ic_launcher-web.png b/sample/ic_launcher-web.png
similarity index 100%
rename from ToggleButtonSample/ic_launcher-web.png
rename to sample/ic_launcher-web.png
diff --git a/ToggleButtonSample/libs/android-support-v4.jar b/sample/libs/android-support-v4.jar
similarity index 100%
rename from ToggleButtonSample/libs/android-support-v4.jar
rename to sample/libs/android-support-v4.jar
diff --git a/ToggleButtonSample/lint.xml b/sample/lint.xml
similarity index 100%
rename from ToggleButtonSample/lint.xml
rename to sample/lint.xml
diff --git a/togglebutton-library/proguard-project.txt b/sample/proguard-project.txt
similarity index 100%
rename from togglebutton-library/proguard-project.txt
rename to sample/proguard-project.txt
diff --git a/ToggleButtonSample/project.properties b/sample/project.properties
similarity index 100%
rename from ToggleButtonSample/project.properties
rename to sample/project.properties
diff --git a/ToggleButtonSample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml
similarity index 100%
rename from ToggleButtonSample/src/main/AndroidManifest.xml
rename to sample/src/main/AndroidManifest.xml
diff --git a/ToggleButtonSample/src/main/java/com/zcw/togglebutton/sample/MainActivity.java b/sample/src/main/java/com/zcw/togglebutton/sample/MainActivity.java
similarity index 100%
rename from ToggleButtonSample/src/main/java/com/zcw/togglebutton/sample/MainActivity.java
rename to sample/src/main/java/com/zcw/togglebutton/sample/MainActivity.java
diff --git a/ToggleButtonSample/src/main/res/drawable-hdpi/ic_launcher.png b/sample/src/main/res/drawable-hdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/src/main/res/drawable-hdpi/ic_launcher.png
rename to sample/src/main/res/drawable-hdpi/ic_launcher.png
diff --git a/ToggleButtonSample/src/main/res/drawable-mdpi/ic_launcher.png b/sample/src/main/res/drawable-mdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/src/main/res/drawable-mdpi/ic_launcher.png
rename to sample/src/main/res/drawable-mdpi/ic_launcher.png
diff --git a/ToggleButtonSample/src/main/res/drawable-xhdpi/ic_launcher.png b/sample/src/main/res/drawable-xhdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/src/main/res/drawable-xhdpi/ic_launcher.png
rename to sample/src/main/res/drawable-xhdpi/ic_launcher.png
diff --git a/ToggleButtonSample/src/main/res/drawable-xxhdpi/ic_launcher.png b/sample/src/main/res/drawable-xxhdpi/ic_launcher.png
similarity index 100%
rename from ToggleButtonSample/src/main/res/drawable-xxhdpi/ic_launcher.png
rename to sample/src/main/res/drawable-xxhdpi/ic_launcher.png
diff --git a/ToggleButtonSample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml
similarity index 100%
rename from ToggleButtonSample/src/main/res/layout/activity_main.xml
rename to sample/src/main/res/layout/activity_main.xml
diff --git a/ToggleButtonSample/src/main/res/values-w820dp/dimens.xml b/sample/src/main/res/values-w820dp/dimens.xml
similarity index 100%
rename from ToggleButtonSample/src/main/res/values-w820dp/dimens.xml
rename to sample/src/main/res/values-w820dp/dimens.xml
diff --git a/ToggleButtonSample/src/main/res/values/dimens.xml b/sample/src/main/res/values/dimens.xml
similarity index 100%
rename from ToggleButtonSample/src/main/res/values/dimens.xml
rename to sample/src/main/res/values/dimens.xml
diff --git a/ToggleButtonSample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml
similarity index 100%
rename from ToggleButtonSample/src/main/res/values/strings.xml
rename to sample/src/main/res/values/strings.xml
diff --git a/ToggleButtonSample/src/main/res/values/styles.xml b/sample/src/main/res/values/styles.xml
similarity index 100%
rename from ToggleButtonSample/src/main/res/values/styles.xml
rename to sample/src/main/res/values/styles.xml
diff --git a/settings.gradle b/settings.gradle
index cde7724..a882e41 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -1,2 +1 @@
-include 'togglebutton-library'
-include 'ToggleButtonSample'
+include 'library', 'sample'
From 8493fc3a4916a6c513e8b22ab19ab3fbf24dd42d Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Sat, 24 Sep 2016 20:18:14 +0800
Subject: [PATCH 13/16] Change bintray publish configuration
---
build.gradle | 2 -
gradle/wrapper/gradle-wrapper.properties | 2 +-
library/bintray.gradle | 113 +++++++++++++++++++++++
library/build.gradle | 107 +++------------------
library/gradle.properties | 8 ++
5 files changed, 133 insertions(+), 99 deletions(-)
create mode 100644 library/bintray.gradle
create mode 100644 library/gradle.properties
diff --git a/build.gradle b/build.gradle
index d8472c7..0f85975 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,8 +5,6 @@ buildscript {
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
- classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.7'
- classpath 'com.github.dcendents:android-maven-gradle-plugin:1.3'
}
}
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index b3ce282..063e5e5 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-bin.zip
diff --git a/library/bintray.gradle b/library/bintray.gradle
new file mode 100644
index 0000000..9e43bd2
--- /dev/null
+++ b/library/bintray.gradle
@@ -0,0 +1,113 @@
+group = PROJ_GROUP
+version = PROJ_VERSION
+project.archivesBaseName = PROJ_ARTIFACTID
+
+apply plugin: 'com.jfrog.bintray'
+apply plugin: 'com.github.dcendents.android-maven'
+
+task sourcesJar(type: Jar) {
+ from android.sourceSets.main.java.srcDirs
+ classifier = 'sources'
+}
+
+task javadoc(type: Javadoc) {
+ source = android.sourceSets.main.java.srcDirs
+ classpath += configurations.compile
+ classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
+}
+
+task javadocJar(type: Jar, dependsOn: javadoc) {
+ classifier = 'javadoc'
+ from javadoc.destinationDir
+}
+
+javadoc {
+ options{
+ encoding "UTF-8"
+ charSet 'UTF-8'
+ author true
+ version true
+ links "http://docs.oracle.com/javase/7/docs/api"
+ title "$PROJ_NAME $PROJ_VERSION"
+ }
+}
+
+artifacts {
+ archives sourcesJar
+ archives javadocJar
+}
+
+install {
+ repositories.mavenInstaller {
+ pom.project {
+ name PROJ_NAME
+ description PROJ_DESCRIPTION
+ url PROJ_WEBSITEURL
+ inceptionYear '2016'
+
+ packaging 'aar'
+ groupId PROJ_GROUP
+ artifactId PROJ_ARTIFACTID
+ version PROJ_VERSION
+
+ licenses {
+ license {
+ name 'The Apache Software License, Version 2.0'
+ url 'http://www.apache.org/licenses/LICENSE-2.0.txt'
+ distribution 'repo'
+ }
+ }
+
+ scm {
+ connection PROJ_VCSURL
+ url PROJ_WEBSITEURL
+
+ }
+ developers {
+ developer {
+ id "zcweng"
+ name "zcweng"
+ }
+ developer {
+ id "ErQi"
+ name "ErQi"
+ email "shengguangchanhui@foxmail.com"
+ }
+ developer {
+ id "msdx"
+ name "Geek_Soledad"
+ email "msdx.android@qq.com"
+ }
+ }
+ }
+ }
+}
+
+bintray {
+ user = project.hasProperty('bintrayUser') ? project.property('bintrayUser') : project.property('BINTRAY_USER')
+ key = project.hasProperty('bintrayKey') ? project.property('bintrayKey') : project.property('BINTRAY_KEY')
+
+ configurations = ['archives']
+
+ dryRun = false
+ publish = true
+
+ pkg {
+ repo = 'maven'
+ name = PROJ_NAME
+ licenses = ['Apache-2.0']
+ vcsUrl = PROJ_VCSURL
+ websiteUrl = PROJ_WEBSITEURL
+ issueTrackerUrl = PROJ_ISSUETRACKERURL
+ publicDownloadNumbers = true
+ version {
+ name = PROJ_VERSION
+ desc = PROJ_DESCRIPTION
+ vcsTag = PROJ_VERSION
+
+ gpg {
+ sign = true
+ }
+ }
+ }
+}
diff --git a/library/build.gradle b/library/build.gradle
index 0185d70..0d0bc72 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -1,14 +1,13 @@
-import java.text.SimpleDateFormat
-
+buildscript {
+ repositories {
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.github.dcendents:android-maven-gradle-plugin:1.5'
+ classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.6'
+ }
+}
apply plugin: 'com.android.library'
-apply plugin: 'com.github.dcendents.android-maven'
-apply plugin: "com.jfrog.bintray"
-
-def siteUrl = "https://github.com/ErQi/${rootProject.ext.artifactName}"
-def gitUrl = "https://github.com/ErQi/${rootProject.ext.artifactName}.git"
-
-group = rootProject.ext.groupName
-version = rootProject.ext.releaseVersionName
android {
compileSdkVersion 22
@@ -20,90 +19,6 @@ android {
}
}
-
-install {
- repositories.mavenInstaller {
- // This generates POM.xml with proper parameters
- pom {
- project {
- packaging 'aar'
- // Add your description here
- name rootProject.ext.artifactName
- url siteUrl
- // Set your license
- licenses {
- license {
- name 'The MIT License (MIT)'
- url 'http://opensource.org/licenses/MIT'
- }
- }
- developers {
- developer {
- id 'ErQi'
- name 'ErQi'
- email 'shengguangchanhui@foxmail.com'
- }
- }
- scm {
- connection gitUrl
- developerConnection gitUrl
- url siteUrl
- }
- }
- }
- }
-}
-
-task sourcesJar(type: Jar) {
- from android.sourceSets.main.java.srcDirs
- classifier = 'sources'
-}
-
-task javadoc(type: Javadoc) {
- source = android.sourceSets.main.java.srcDirs
- classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
- options.encoding = 'UTF-8'
-}
-
-task javadocJar(type: Jar, dependsOn: javadoc) {
- classifier = 'javadoc'
- from javadoc.destinationDir
+if (hasProperty("bintrayUser") || hasProperty("BINTRAY_USER")) {
+ apply from: 'bintray.gradle'
}
-
-artifacts {
- archives javadocJar
- archives sourcesJar
-}
-
-Properties properties = new Properties()
-// for wrapper project structure
-File propertyFile = project.rootProject.file('local.properties')
-properties.load(propertyFile.newDataInputStream())
-
-bintray {
- user = properties.getProperty("bintray.user")
- key = properties.getProperty("bintray.apikey")
- configurations = ['archives'] //When uploading Maven-based publication files
- dryRun = false //Whether to run this as dry-run, without deploying
- publish = true //If version should be auto published after an upload
- pkg {
- repo = 'maven'
- name = rootProject.ext.artifactName
- desc = rootProject.ext.artifactDescription
- websiteUrl = siteUrl
- issueTrackerUrl = siteUrl + '/issues'
- vcsUrl = gitUrl
- licenses = ['MIT']
- labels = rootProject.ext.artifactLabels
- publicDownloadNumbers = true
- //Optional version descriptor
- version {
- name = rootProject.ext.releaseVersionName //Bintray logical version name
- released = new SimpleDateFormat('yyyy-MM-dd\'T\'HH:mm:ss.SSSZZ').format(new Date())
- //2 possible values: date in the format of 'yyyy-MM-dd'T'HH:mm:ss.SSSZZ' OR a java.util.Date instance
- vcsTag = rootProject.ext.releaseVersionName
- }
- }
-}
-
-
diff --git a/library/gradle.properties b/library/gradle.properties
new file mode 100644
index 0000000..cae1156
--- /dev/null
+++ b/library/gradle.properties
@@ -0,0 +1,8 @@
+PROJ_GROUP=com.githang
+PROJ_VERSION=1.0
+PROJ_NAME=zcweng-ToggleButton
+PROJ_WEBSITEURL=https://github.com/zcweng/ToggleButton
+PROJ_ISSUETRACKERURL=https://github.com/zcweng/ToggleButton/issues
+PROJ_VCSURL=git@github.com:zcweng/ToggleButton.git
+PROJ_DESCRIPTION=ToggleButton Widget For Android Dev
+PROJ_ARTIFACTID=zcweng-togglebutton
\ No newline at end of file
From d9a39453d9c7b1d878171d402f994c5e830d5732 Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Sat, 24 Sep 2016 20:34:29 +0800
Subject: [PATCH 14/16] Using remote dependency instead of copying 'rebound'
library source files into
---
library/build.gradle | 4 +
.../rebound/AndroidSpringLooperFactory.java | 141 -----
.../facebook/rebound/BaseSpringSystem.java | 196 -------
.../rebound/OrigamiValueConverter.java | 21 -
.../rebound/SimpleSpringListener.java | 29 -
.../java/com/facebook/rebound/Spring.java | 521 ------------------
.../com/facebook/rebound/SpringConfig.java | 44 --
.../rebound/SpringConfigRegistry.java | 89 ---
.../com/facebook/rebound/SpringListener.java | 39 --
.../com/facebook/rebound/SpringLooper.java | 40 --
.../com/facebook/rebound/SpringSystem.java | 22 -
.../rebound/SpringSystemListener.java | 33 --
.../java/com/facebook/rebound/SpringUtil.java | 53 --
.../com/facebook/rebound/SteppingLooper.java | 38 --
.../facebook/rebound/SynchronousLooper.java | 46 --
.../rebound/ui/SpringConfiguratorView.java | 419 --------------
.../java/com/facebook/rebound/ui/Util.java | 49 --
17 files changed, 4 insertions(+), 1780 deletions(-)
delete mode 100644 library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
delete mode 100644 library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
delete mode 100644 library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
delete mode 100644 library/src/main/java/com/facebook/rebound/Spring.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringConfig.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringListener.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringLooper.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringSystem.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringSystemListener.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SpringUtil.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SteppingLooper.java
delete mode 100644 library/src/main/java/com/facebook/rebound/SynchronousLooper.java
delete mode 100644 library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
delete mode 100644 library/src/main/java/com/facebook/rebound/ui/Util.java
diff --git a/library/build.gradle b/library/build.gradle
index 0d0bc72..bc0c433 100644
--- a/library/build.gradle
+++ b/library/build.gradle
@@ -19,6 +19,10 @@ android {
}
}
+dependencies {
+ compile 'com.facebook.rebound:rebound:0.3.8'
+}
+
if (hasProperty("bintrayUser") || hasProperty("BINTRAY_USER")) {
apply from: 'bintray.gradle'
}
diff --git a/library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java b/library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
deleted file mode 100644
index f6fb01e..0000000
--- a/library/src/main/java/com/facebook/rebound/AndroidSpringLooperFactory.java
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-import android.annotation.TargetApi;
-import android.os.Build;
-import android.os.Handler;
-import android.os.SystemClock;
-import android.view.Choreographer;
-
-/**
- * Android version of the spring looper that uses the most appropriate frame callback mechanism
- * available. It uses Android's {@link Choreographer} when available, otherwise it uses a
- * {@link Handler}.
- */
-abstract class AndroidSpringLooperFactory {
-
- /**
- * Create an Android {@link com.facebook.rebound.SpringLooper} for the detected Android platform.
- * @return a SpringLooper
- */
- public static SpringLooper createSpringLooper() {
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
- return ChoreographerAndroidSpringLooper.create();
- } else {
- return LegacyAndroidSpringLooper.create();
- }
- }
-
- /**
- * The base implementation of the Android spring looper, using a {@link Handler} for the
- * frame callbacks.
- */
- private static class LegacyAndroidSpringLooper extends SpringLooper {
-
- private final Handler mHandler;
- private final Runnable mLooperRunnable;
- private boolean mStarted;
- private long mLastTime;
-
- /**
- * @return an Android spring looper using a new {@link Handler} instance
- */
- public static SpringLooper create() {
- return new LegacyAndroidSpringLooper(new Handler());
- }
-
- public LegacyAndroidSpringLooper(Handler handler) {
- mHandler = handler;
- mLooperRunnable = new Runnable() {
- @Override
- public void run() {
- if (!mStarted || mSpringSystem == null) {
- return;
- }
- long currentTime = SystemClock.uptimeMillis();
- mSpringSystem.loop(currentTime - mLastTime);
- mHandler.post(mLooperRunnable);
- }
- };
- }
-
- @Override
- public void start() {
- if (mStarted) {
- return;
- }
- mStarted = true;
- mLastTime = SystemClock.uptimeMillis();
- mHandler.removeCallbacks(mLooperRunnable);
- mHandler.post(mLooperRunnable);
- }
-
- @Override
- public void stop() {
- mStarted = false;
- mHandler.removeCallbacks(mLooperRunnable);
- }
- }
-
- /**
- * The Jelly Bean and up implementation of the spring looper that uses Android's
- * {@link Choreographer} instead of a {@link Handler}
- */
- @TargetApi(Build.VERSION_CODES.JELLY_BEAN)
- private static class ChoreographerAndroidSpringLooper extends SpringLooper {
-
- private final Choreographer mChoreographer;
- private final Choreographer.FrameCallback mFrameCallback;
- private boolean mStarted;
- private long mLastTime;
-
- /**
- * @return an Android spring choreographer using the system {@link Choreographer}
- */
- public static ChoreographerAndroidSpringLooper create() {
- return new ChoreographerAndroidSpringLooper(Choreographer.getInstance());
- }
-
- public ChoreographerAndroidSpringLooper(Choreographer choreographer) {
- mChoreographer = choreographer;
- mFrameCallback = new Choreographer.FrameCallback() {
- @Override
- public void doFrame(long frameTimeNanos) {
- if (!mStarted || mSpringSystem == null) {
- return;
- }
- long currentTime = SystemClock.uptimeMillis();
- mSpringSystem.loop(currentTime - mLastTime);
- mLastTime = currentTime;
- mChoreographer.postFrameCallback(mFrameCallback);
- }
- };
- }
-
- @Override
- public void start() {
- if (mStarted) {
- return;
- }
- mStarted = true;
- mLastTime = SystemClock.uptimeMillis();
- mChoreographer.removeFrameCallback(mFrameCallback);
- mChoreographer.postFrameCallback(mFrameCallback);
- }
-
- @Override
- public void stop() {
- mStarted = false;
- mChoreographer.removeFrameCallback(mFrameCallback);
- }
- }
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/facebook/rebound/BaseSpringSystem.java b/library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
deleted file mode 100644
index 846bc21..0000000
--- a/library/src/main/java/com/facebook/rebound/BaseSpringSystem.java
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.CopyOnWriteArraySet;
-
-/**
- * BaseSpringSystem maintains the set of springs within an Application context. It is responsible for
- * Running the spring integration loop and maintains a registry of all the Springs it solves for.
- * In addition to listening to physics events on the individual Springs in the system, listeners
- * can be added to the BaseSpringSystem itself to provide pre and post integration setup.
- */
-public class BaseSpringSystem {
-
- private final Map mSpringRegistry = new HashMap();
- private final Set mActiveSprings = new CopyOnWriteArraySet();
- private final SpringLooper mSpringLooper;
- private final CopyOnWriteArraySet mListeners = new CopyOnWriteArraySet();
- private boolean mIdle = true;
-
- /**
- * create a new BaseSpringSystem
- * @param springLooper parameterized springLooper to allow testability of the
- * physics loop
- */
- public BaseSpringSystem(SpringLooper springLooper) {
- if (springLooper == null) {
- throw new IllegalArgumentException("springLooper is required");
- }
- mSpringLooper = springLooper;
- mSpringLooper.setSpringSystem(this);
- }
-
- /**
- * check if the system is idle
- * @return is the system idle
- */
- public boolean getIsIdle() {
- return mIdle;
- }
-
- /**
- * create a spring with a random uuid for its name.
- * @return the spring
- */
- public Spring createSpring() {
- Spring spring = new Spring(this);
- registerSpring(spring);
- return spring;
- }
-
- /**
- * get a spring by name
- * @param id id of the spring to retrieve
- * @return Spring with the specified key
- */
- public Spring getSpringById(String id) {
- if (id == null) {
- throw new IllegalArgumentException("id is required");
- }
- return mSpringRegistry.get(id);
- }
-
- /**
- * return all the springs in the simulator
- * @return all the springs
- */
- public List getAllSprings() {
- Collection collection = mSpringRegistry.values();
- List list;
- if (collection instanceof List) {
- list = (List)collection;
- } else {
- list = new ArrayList(collection);
- }
- return Collections.unmodifiableList(list);
- }
-
- /**
- * Registers a Spring to this BaseSpringSystem so it can be iterated if active.
- * @param spring the Spring to register
- */
- void registerSpring(Spring spring) {
- if (spring == null) {
- throw new IllegalArgumentException("spring is required");
- }
- if (mSpringRegistry.containsKey(spring.getId())) {
- throw new IllegalArgumentException("spring is already registered"); }
- mSpringRegistry.put(spring.getId(), spring);
- }
-
- /**
- * Deregisters a Spring from this BaseSpringSystem, so it won't be iterated anymore. The Spring should
- * not be used anymore after doing this.
- *
- * @param spring the Spring to deregister
- */
- void deregisterSpring(Spring spring) {
- if (spring == null) {
- throw new IllegalArgumentException("spring is required");
- }
- mActiveSprings.remove(spring);
- mSpringRegistry.remove(spring.getId());
- }
-
- /**
- * update the springs in the system
- * @param deltaTime delta since last update in millis
- */
- void advance(double deltaTime) {
- for (Spring spring : mActiveSprings) {
- // advance time in seconds
- if (spring.systemShouldAdvance()) {
- spring.advance(deltaTime / 1000.0);
- } else {
- mActiveSprings.remove(spring);
- }
- }
- }
-
- /**
- * loop the system until idle
- * @param ellapsedMillis = =
- */
- public void loop(double ellapsedMillis) {
- for (SpringSystemListener listener : mListeners) {
- listener.onBeforeIntegrate(this);
- }
- advance(ellapsedMillis);
- if (mActiveSprings.isEmpty()) {
- mIdle = true;
- }
- for (SpringSystemListener listener : mListeners) {
- listener.onAfterIntegrate(this);
- }
- if (mIdle) {
- mSpringLooper.stop();
- }
- }
-
- /**
- * This is used internally by the {@link Spring}s created by this {@link BaseSpringSystem} to notify
- * it has reached a state where it needs to be iterated. This will add the spring to the list of
- * active springs on this system and start the iteration if the system was idle before this call.
- * @param springId the id of the Spring to be activated
- */
- void activateSpring(String springId) {
- Spring spring = mSpringRegistry.get(springId);
- if (spring == null) {
- throw new IllegalArgumentException("springId " + springId + " does not reference a registered spring");
- }
- mActiveSprings.add(spring);
- if (getIsIdle()) {
- mIdle = false;
- mSpringLooper.start();
- }
- }
-
- /** listeners
- * @param newListener = =
- **/
- public void addListener(SpringSystemListener newListener) {
- if (newListener == null) {
- throw new IllegalArgumentException("newListener is required");
- }
- mListeners.add(newListener);
- }
-
- public void removeListener(SpringSystemListener listenerToRemove) {
- if (listenerToRemove == null) {
- throw new IllegalArgumentException("listenerToRemove is required");
- }
- mListeners.remove(listenerToRemove);
- }
-
- public void removeAllListeners() {
- mListeners.clear();
- }
-}
-
-
diff --git a/library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java b/library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
deleted file mode 100644
index 77b3877..0000000
--- a/library/src/main/java/com/facebook/rebound/OrigamiValueConverter.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.facebook.rebound;
-
-public class OrigamiValueConverter {
-
- public static double tensionFromOrigamiValue(double oValue) {
- return oValue == 0 ? 0 : (oValue - 30.0) * 3.62 + 194.0;
- }
-
- public static double origamiValueFromTension(double tension) {
- return tension == 0 ? 0 : (tension - 194.0) / 3.62 + 30.0;
- }
-
- public static double frictionFromOrigamiValue(double oValue) {
- return oValue == 0 ? 0 : (oValue - 8.0) * 3.0 + 25.0;
- }
-
- public static double origamiValueFromFriction(double friction) {
- return friction == 0 ? 0 : (friction - 25.0) / 3.0 + 8.0;
- }
-
-}
diff --git a/library/src/main/java/com/facebook/rebound/SimpleSpringListener.java b/library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
deleted file mode 100644
index 0bf41ba..0000000
--- a/library/src/main/java/com/facebook/rebound/SimpleSpringListener.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-public class SimpleSpringListener implements SpringListener {
- @Override
- public void onSpringUpdate(Spring spring) {
- }
-
- @Override
- public void onSpringAtRest(Spring spring) {
- }
-
- @Override
- public void onSpringActivate(Spring spring) {
- }
-
- @Override
- public void onSpringEndStateChange(Spring spring) {
- }
-}
diff --git a/library/src/main/java/com/facebook/rebound/Spring.java b/library/src/main/java/com/facebook/rebound/Spring.java
deleted file mode 100644
index e082b4f..0000000
--- a/library/src/main/java/com/facebook/rebound/Spring.java
+++ /dev/null
@@ -1,521 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-import java.util.concurrent.CopyOnWriteArraySet;
-
-/**
- * Classical spring implementing Hooke's law with configurable friction and tension.
- */
-public class Spring {
-
- // unique incrementer id for springs
- private static int ID = 0;
-
- // maximum amount of time to simulate per physics iteration in seconds (4 frames at 60 FPS)
- private static final double MAX_DELTA_TIME_SEC = 0.064;
- // fixed timestep to use in the physics solver in seconds
- private static final double SOLVER_TIMESTEP_SEC = 0.001;
- private SpringConfig mSpringConfig;
- private boolean mOvershootClampingEnabled;
-
- // storage for the current and prior physics state while integration is occurring
- private static class PhysicsState {
- double position;
- double velocity;
- }
-
- // unique id for the spring in the system
- private final String mId;
- // all physics simulation objects are final and reused in each processing pass
- private final PhysicsState mCurrentState = new PhysicsState();
- private final PhysicsState mPreviousState = new PhysicsState();
- private final PhysicsState mTempState = new PhysicsState();
- private double mStartValue;
- private double mEndValue;
- private boolean mWasAtRest = true;
- // thresholds for determining when the spring is at rest
- private double mRestSpeedThreshold = 0.005;
- private double mDisplacementFromRestThreshold = 0.005;
- private CopyOnWriteArraySet mListeners = new CopyOnWriteArraySet();
- private double mTimeAccumulator = 0;
-
- private final BaseSpringSystem mSpringSystem;
-
- /**
- * create a new spring
- */
- Spring(BaseSpringSystem springSystem) {
- if (springSystem == null) {
- throw new IllegalArgumentException("Spring cannot be created outside of a BaseSpringSystem");
- }
- mSpringSystem = springSystem;
- mId = "spring:" + ID++;
- setSpringConfig(SpringConfig.defaultConfig);
- }
-
- /**
- * Destroys this Spring, meaning that it will be deregistered from its BaseSpringSystem so it won't be
- * iterated anymore and will clear its set of listeners. Do not use the Spring after calling this,
- * doing so may just cause an exception to be thrown.
- */
- public void destroy() {
- mListeners.clear();
- mSpringSystem.deregisterSpring(this);
- }
-
- /**
- * get the unique id for this spring
- * @return the unique id
- */
- public String getId() {
- return mId;
- }
-
- /**
- * set the config class
- * @param springConfig config class for the spring
- * @return this Spring instance for chaining
- */
- public Spring setSpringConfig(SpringConfig springConfig) {
- if (springConfig == null) {
- throw new IllegalArgumentException("springConfig is required");
- }
- mSpringConfig = springConfig;
- return this;
- }
-
- /**
- * retrieve the spring config for this spring
- * @return the SpringConfig applied to this spring
- */
- public SpringConfig getSpringConfig() {
- return mSpringConfig;
- }
-
- /**
- * Set the displaced value to determine the displacement for the spring from the rest value.
- * This value is retained and used to calculate the displacement ratio.
- * This also updates the start value of the Spring.
- * @param currentValue the new start and current value for the spring
- * @return the spring for chaining
- */
- public Spring setCurrentValue(double currentValue) {
- mStartValue = currentValue;
- mCurrentState.position = currentValue;
- mSpringSystem.activateSpring(this.getId());
- for (SpringListener listener : mListeners) {
- listener.onSpringUpdate(this);
- }
- return this;
- }
-
- /**
- * Get the displacement value from the last time setCurrentValue was called.
- * @return displacement value
- */
- public double getStartValue() {
- return mStartValue;
- }
-
- /**
- * Get the current
- * @return current value
- */
- public double getCurrentValue() {
- return mCurrentState.position;
- }
-
- /**
- * get the displacement of the springs current value from its rest value.
- * @return the distance displaced by
- */
- public double getCurrentDisplacementDistance() {
- return getDisplacementDistanceForState(mCurrentState);
- }
-
- /**
- * get the displacement from rest for a given physics state
- * @param state the state to measure from
- * @return the distance displaced by
- */
- private double getDisplacementDistanceForState(PhysicsState state) {
- return Math.abs(mEndValue - state.position);
- }
-
- /**
- * set the rest value to determine the displacement for the spring
- * @param endValue the endValue for the spring
- * @return the spring for chaining
- */
- public Spring setEndValue(double endValue) {
- if (mEndValue == endValue && isAtRest()) {
- return this;
- }
- mStartValue = getCurrentValue();
- mEndValue = endValue;
- mSpringSystem.activateSpring(this.getId());
- for (SpringListener listener : mListeners) {
- listener.onSpringEndStateChange(this);
- }
- return this;
- }
-
- /**
- * get the rest value used for determining the displacement of the spring
- * @return the rest value for the spring
- */
- public double getEndValue() {
- return mEndValue;
- }
-
- /**
- * set the velocity on the spring in pixels per second
- * @param velocity = =
- * @return the spring for chaining
- */
- public Spring setVelocity(double velocity) {
- mCurrentState.velocity = velocity;
- mSpringSystem.activateSpring(this.getId());
- return this;
- }
-
- /**
- * get the velocity of the spring
- * @return the current velocity
- */
- public double getVelocity() {
- return mCurrentState.velocity;
- }
-
- /**
- * Sets the speed at which the spring should be considered at rest.
- * @param restSpeedThreshold speed pixels per second
- * @return the spring for chaining
- */
- public Spring setRestSpeedThreshold(double restSpeedThreshold) {
- mRestSpeedThreshold = restSpeedThreshold;
- return this;
- }
-
- /**
- * Returns the speed at which the spring should be considered at rest in pixels per second
- * @return speed in pixels per second
- */
- public double getRestSpeedThreshold() {
- return mRestSpeedThreshold;
- }
-
- /**
- * set the threshold of displacement from rest below which the spring should be considered at rest
- * @param displacementFromRestThreshold displacement to consider resting below
- * @return the spring for chaining
- */
- public Spring setRestDisplacementThreshold(double displacementFromRestThreshold) {
- mDisplacementFromRestThreshold = displacementFromRestThreshold;
- return this;
- }
-
- /**
- * get the threshold of displacement from rest below which the spring should be considered at rest
- * @return displacement to consider resting below
- */
- public double getRestDisplacementThreshold() {
- return mDisplacementFromRestThreshold;
- }
-
- /**
- * Force the spring to clamp at its end value to avoid overshooting the target value.
- * @param overshootClampingEnabled whether or not to enable overshoot clamping
- * @return the spring for chaining
- */
- public Spring setOvershootClampingEnabled(boolean overshootClampingEnabled) {
- mOvershootClampingEnabled = overshootClampingEnabled;
- return this;
- }
-
- /**
- * Check if overshoot clamping is enabled.
- * @return is overshoot clamping enabled
- */
- public boolean isOvershootClampingEnabled() {
- return mOvershootClampingEnabled;
- }
-
- /**
- * Check if the spring is overshooting beyond its target.
- * @return true if the spring is overshooting its target
- */
- public boolean isOvershooting() {
- return (mStartValue < mEndValue && getCurrentValue() > mEndValue) ||
- (mStartValue > mEndValue && getCurrentValue() < mEndValue);
- }
-
- /**
- * advance the physics simulation in SOLVER_TIMESTEP_SEC sized chunks to fulfill the required
- * realTimeDelta.
- * The math is inlined inside the loop since it made a huge performance impact when there are
- * several springs being advanced.
- * @param time clock time
- * @param realDeltaTime clock drift
- */
- void advance(double realDeltaTime) {
-
- boolean isAtRest = isAtRest();
-
- if (isAtRest && mWasAtRest) {
- /* begin debug
- Log.d(TAG, "bailing out because we are at rest:" + getName());
- end debug */
- return;
- }
-
- // clamp the amount of realTime to simulate to avoid stuttering in the UI. We should be able
- // to catch up in a subsequent advance if necessary.
- double adjustedDeltaTime = realDeltaTime;
- if (realDeltaTime > MAX_DELTA_TIME_SEC) {
- adjustedDeltaTime = MAX_DELTA_TIME_SEC;
- }
-
- /* begin debug
- long startTime = System.currentTimeMillis();
- int iterations = 0;
- end debug */
-
- mTimeAccumulator += adjustedDeltaTime;
-
- double tension = mSpringConfig.tension;
- double friction = mSpringConfig.friction;
-
- double position = mCurrentState.position;
- double velocity = mCurrentState.velocity;
- double tempPosition = mTempState.position;
- double tempVelocity = mTempState.velocity;
-
- double aVelocity, aAcceleration;
- double bVelocity, bAcceleration;
- double cVelocity, cAcceleration;
- double dVelocity, dAcceleration;
-
- double dxdt, dvdt;
-
- // iterate over the true time
- while (mTimeAccumulator >= SOLVER_TIMESTEP_SEC) {
- /* begin debug
- iterations++;
- end debug */
- mTimeAccumulator -= SOLVER_TIMESTEP_SEC;
-
- if (mTimeAccumulator < SOLVER_TIMESTEP_SEC) {
- // This will be the last iteration. Remember the previous state in case we need to
- // interpolate
- mPreviousState.position = position;
- mPreviousState.velocity = velocity;
- }
-
- // Perform an RK4 integration to provide better detection of the acceleration curve via
- // sampling of Euler integrations at 4 intervals feeding each derivative into the calculation
- // of the next and taking a weighted sum of the 4 derivatives as the final output.
-
- // This math was inlined since it made for big performance improvements when advancing several
- // springs in one pass of the BaseSpringSystem.
-
- // The initial derivative is based on the current velocity and the calculated acceleration
- aVelocity = velocity;
- aAcceleration = (tension * (mEndValue - tempPosition)) - friction * velocity;
-
- // Calculate the next derivatives starting with the last derivative and integrating over the
- // timestep
- tempPosition = position + aVelocity * SOLVER_TIMESTEP_SEC * 0.5;
- tempVelocity = velocity + aAcceleration * SOLVER_TIMESTEP_SEC * 0.5;
- bVelocity = tempVelocity;
- bAcceleration = (tension * (mEndValue - tempPosition)) - friction * tempVelocity;
-
- tempPosition = position + bVelocity * SOLVER_TIMESTEP_SEC * 0.5;
- tempVelocity = velocity + bAcceleration * SOLVER_TIMESTEP_SEC * 0.5;
- cVelocity = tempVelocity;
- cAcceleration = (tension * (mEndValue - tempPosition)) - friction * tempVelocity;
-
- tempPosition = position + cVelocity * SOLVER_TIMESTEP_SEC;
- tempVelocity = velocity + cAcceleration * SOLVER_TIMESTEP_SEC;
- dVelocity = tempVelocity;
- dAcceleration = (tension * (mEndValue - tempPosition)) - friction * tempVelocity;
-
- // Take the weighted sum of the 4 derivatives as the final output.
- dxdt = 1.0/6.0 * (aVelocity + 2.0 * (bVelocity + cVelocity) + dVelocity);
- dvdt = 1.0/6.0 * (aAcceleration + 2.0 * (bAcceleration + cAcceleration) + dAcceleration);
-
- position += dxdt * SOLVER_TIMESTEP_SEC;
- velocity += dvdt * SOLVER_TIMESTEP_SEC;
- }
-
- mTempState.position = tempPosition;
- mTempState.velocity = tempVelocity;
-
- mCurrentState.position = position;
- mCurrentState.velocity = velocity;
-
- if (mTimeAccumulator > 0) {
- interpolate(mTimeAccumulator / SOLVER_TIMESTEP_SEC);
- }
-
- // End the spring immediately if it is overshooting and overshoot clamping is enabled.
- // Also make sure that if the spring was considered within a resting threshold that it's now
- // snapped to its end value.
- if (isAtRest() || (mOvershootClampingEnabled && isOvershooting())) {
- // Don't call setCurrentValue because that forces a call to onSpringUpdate
- mStartValue = mEndValue;
- mCurrentState.position = mEndValue;
- setVelocity(0);
- isAtRest = true;
- }
-
- /* begin debug
- long endTime = System.currentTimeMillis();
- long elapsedMillis = endTime - startTime;
- Log.d(TAG,
- "iterations:" + iterations +
- " iterationTime:" + elapsedMillis +
- " position:" + mCurrentState.position +
- " velocity:" + mCurrentState.velocity +
- " realDeltaTime:" + realDeltaTime +
- " adjustedDeltaTime:" + adjustedDeltaTime +
- " isAtRest:" + isAtRest +
- " wasAtRest:" + mWasAtRest);
- end debug */
-
- // NB: do these checks outside the loop so all listeners are properly notified of the state
- // transition
- boolean notifyActivate = false;
- if (mWasAtRest) {
- mWasAtRest = false;
- notifyActivate = true;
- }
- boolean notifyAtRest = false;
- if (isAtRest) {
- mWasAtRest = true;
- notifyAtRest = true;
- }
- for (SpringListener listener : mListeners) {
- // starting to move
- if (notifyActivate) {
- listener.onSpringActivate(this);
- }
-
- // updated
- listener.onSpringUpdate(this);
-
- // coming to rest
- if (notifyAtRest) {
- listener.onSpringAtRest(this);
- }
- }
- }
-
- /**
- * Check if this spring should be advanced by the system. * The rule is if the spring is
- * currently at rest and it was at rest in the previous advance, the system can skip this spring
- * @return should the system process this spring
- */
- public boolean systemShouldAdvance() {
- return !isAtRest() || !wasAtRest();
- }
-
- /**
- * Check if the spring was at rest in the prior iteration. This is used for ensuring the ending
- * callbacks are fired as the spring comes to a rest.
- * @return true if the spring was at rest in the prior iteration
- */
- public boolean wasAtRest() {
- return mWasAtRest;
- }
-
- /**
- * check if the current state is at rest
- * @return is the spring at rest
- */
- public boolean isAtRest() {
- return Math.abs(mCurrentState.velocity) <= mRestSpeedThreshold &&
- getDisplacementDistanceForState(mCurrentState) <= mDisplacementFromRestThreshold;
- }
-
- /**
- * Set the spring to be at rest by making its end value equal to its current value and setting
- * velocity to 0.
- * @return = =
- */
- public Spring setAtRest() {
- mEndValue = mCurrentState.position;
- mTempState.position = mCurrentState.position;
- mCurrentState.velocity = 0;
- return this;
- }
-
- /**
- * linear interpolation between the previous and current physics state based on the amount of
- * timestep remaining after processing the rendering delta time in timestep sized chunks.
- * @param alpha from 0 to 1, where 0 is the previous state, 1 is the current state
- */
- private void interpolate(double alpha) {
- mCurrentState.position = mCurrentState.position * alpha + mPreviousState.position *(1-alpha);
- mCurrentState.velocity = mCurrentState.velocity * alpha + mPreviousState.velocity *(1-alpha);
- }
-
- /** listeners **/
-
- /**
- * add a listener
- * @param newListener to add
- * @return the spring for chaining
- */
- public Spring addListener(SpringListener newListener) {
- if (newListener == null) {
- throw new IllegalArgumentException("newListener is required");
- }
- mListeners.add(newListener);
- return this;
- }
-
- /**
- * remove a listener
- * @param listenerToRemove to remove
- * @return the spring for chaining
- */
- public Spring removeListener(SpringListener listenerToRemove) {
- if (listenerToRemove == null) {
- throw new IllegalArgumentException("listenerToRemove is required");
- }
- mListeners.remove(listenerToRemove);
- return this;
- }
-
- /**
- * remove all of the listeners
- * @return the spring for chaining
- */
- public Spring removeAllListeners() {
- mListeners.clear();
- return this;
- }
-
- /**
- * This method checks to see that the current spring displacement value is equal to the input,
- * accounting for the spring's rest displacement threshold.
- * @param value The value to compare the spring value to
- * @return Whether the displacement value from the spring is within the bounds of the compare
- * value, accounting for threshold
- */
- public boolean currentValueIsApproximately(double value) {
- return Math.abs(getCurrentValue() - value) <= getRestDisplacementThreshold();
- }
-
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/SpringConfig.java b/library/src/main/java/com/facebook/rebound/SpringConfig.java
deleted file mode 100644
index a28b5d2..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringConfig.java
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-/**
- * Data structure for storing spring configuration.
- */
-public class SpringConfig {
- public double friction;
- public double tension;
-
- public static SpringConfig defaultConfig = SpringConfig.fromOrigamiTensionAndFriction(40, 7);
-
- /**
- * constructor for the SpringConfig
- * @param tension tension value for the SpringConfig
- * @param friction friction value for the SpringConfig
- */
- public SpringConfig(double tension, double friction) {
- this.tension = tension;
- this.friction = friction;
- }
-
- /**
- * A helper to make creating a SpringConfig easier with values mapping to the Origami values.
- * @param qcTension tension as defined in the Quartz Composition
- * @param qcFriction friction as defined in the Quartz Composition
- * @return a SpringConfig that maps to these values
- */
- public static SpringConfig fromOrigamiTensionAndFriction(double qcTension, double qcFriction) {
- return new SpringConfig(
- OrigamiValueConverter.tensionFromOrigamiValue(qcTension),
- OrigamiValueConverter.frictionFromOrigamiValue(qcFriction)
- );
- }
-}
diff --git a/library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java b/library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
deleted file mode 100644
index 8771db2..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringConfigRegistry.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * class for maintaining a registry of all spring configs
- */
-public class SpringConfigRegistry {
-
- private static final SpringConfigRegistry INSTANCE = new SpringConfigRegistry(true);
-
- public static SpringConfigRegistry getInstance() {
- return INSTANCE;
- }
-
- private final Map mSpringConfigMap;
-
- /**
- * constructor for the SpringConfigRegistry
- */
- SpringConfigRegistry(boolean includeDefaultEntry) {
- mSpringConfigMap = new HashMap();
- if (includeDefaultEntry) {
- addSpringConfig(SpringConfig.defaultConfig, "default config");
- }
- }
-
- /**
- * add a SpringConfig to the registry
- *
- * @param springConfig SpringConfig to add to the registry
- * @param configName name to give the SpringConfig in the registry
- * @return true if the SpringConfig was added, false if a config with that name is already
- * present.
- */
- public boolean addSpringConfig(SpringConfig springConfig, String configName) {
- if (springConfig == null) {
- throw new IllegalArgumentException("springConfig is required");
- }
- if (configName == null) {
- throw new IllegalArgumentException("configName is required");
- }
- if (mSpringConfigMap.containsKey(springConfig)) {
- return false;
- }
- mSpringConfigMap.put(springConfig, configName);
- return true;
- }
-
- /**
- * remove a specific SpringConfig from the registry
- * @param springConfig the of the SpringConfig to remove
- * @return true if the SpringConfig was removed, false if it was not present.
- */
- public boolean removeSpringConfig(SpringConfig springConfig) {
- if (springConfig == null) {
- throw new IllegalArgumentException("springConfig is required");
- }
- return mSpringConfigMap.remove(springConfig) != null;
- }
-
- /**
- * retrieve all SpringConfig in the registry
- * @return a list of all SpringConfig
- */
- public Map getAllSpringConfig() {
- return Collections.unmodifiableMap(mSpringConfigMap);
- }
-
- /**
- * clear all SpringConfig in the registry
- */
- public void removeAllSpringConfig() {
- mSpringConfigMap.clear();
- }
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/SpringListener.java b/library/src/main/java/com/facebook/rebound/SpringListener.java
deleted file mode 100644
index ae1f407..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringListener.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-public interface SpringListener {
-
- /**
- * called whenever the spring is updated
- * @param spring the Spring sending the update
- */
- void onSpringUpdate(Spring spring);
-
- /**
- * called whenever the spring achieves a resting state
- * @param spring the spring that's now resting
- */
- void onSpringAtRest(Spring spring);
-
- /**
- * called whenever the spring leaves its resting state
- * @param spring the spring that has left its resting state
- */
- void onSpringActivate(Spring spring);
-
- /**
- * called whenever the spring notifies of displacement state changes
- * @param spring the spring whose end state has changed
- */
- void onSpringEndStateChange(Spring spring);
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/SpringLooper.java b/library/src/main/java/com/facebook/rebound/SpringLooper.java
deleted file mode 100644
index d25ddb9..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringLooper.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-/**
- * The spring looper is an interface for implementing platform-dependent run loops.
- */
-public abstract class SpringLooper {
-
- protected BaseSpringSystem mSpringSystem;
-
- /**
- * Set the BaseSpringSystem that the SpringLooper will call back to.
- * @param springSystem the spring system to call loop on.
- */
- public void setSpringSystem(BaseSpringSystem springSystem) {
- mSpringSystem = springSystem;
- }
-
- /**
- * The BaseSpringSystem has requested that the looper begins running this {@link Runnable}
- * on every frame. The {@link Runnable} will continue running on every frame until
- * {@link #stop()} is called.
- * If an existing {@link Runnable} had been started on this looper, it will be cancelled.
- */
- public abstract void start();
-
- /**
- * The looper will no longer run the {@link Runnable}.
- */
- public abstract void stop();
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/facebook/rebound/SpringSystem.java b/library/src/main/java/com/facebook/rebound/SpringSystem.java
deleted file mode 100644
index 9881342..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringSystem.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package com.facebook.rebound;
-
-/**
- * This is a wrapper for BaseSpringSystem that provides the convenience of automatically providing
- * the AndroidSpringLooper dependency in {@link SpringSystem#create}.
- */
-public class SpringSystem extends BaseSpringSystem {
-
- /**
- * Create a new SpringSystem providing the appropriate constructor parameters to work properly
- * in an Android environment.
- * @return the SpringSystem
- */
- public static SpringSystem create() {
- return new SpringSystem(AndroidSpringLooperFactory.createSpringLooper());
- }
-
- private SpringSystem(SpringLooper springLooper) {
- super(springLooper);
- }
-
-}
\ No newline at end of file
diff --git a/library/src/main/java/com/facebook/rebound/SpringSystemListener.java b/library/src/main/java/com/facebook/rebound/SpringSystemListener.java
deleted file mode 100644
index 9b4bc8e..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringSystemListener.java
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-/**
- * SpringSystemListener provides an interface for listening to events before and after each Physics
- * solving loop the BaseSpringSystem runs.
- */
-public interface SpringSystemListener {
-
- /**
- * Runs before each pass through the physics integration loop providing an opportunity to do any
- * setup or alterations to the Physics state before integrating.
- * @param springSystem the BaseSpringSystem listened to
- */
- void onBeforeIntegrate(BaseSpringSystem springSystem);
-
- /**
- * Runs after each pass through the physics integration loop providing an opportunity to do any
- * setup or alterations to the Physics state after integrating.
- * @param springSystem the BaseSpringSystem listened to
- */
- void onAfterIntegrate(BaseSpringSystem springSystem);
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/SpringUtil.java b/library/src/main/java/com/facebook/rebound/SpringUtil.java
deleted file mode 100644
index bbe5dd8..0000000
--- a/library/src/main/java/com/facebook/rebound/SpringUtil.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound;
-
-public class SpringUtil {
-
- /**
- * Map a value within a given range to another range.
- * @param value the value to map
- * @param fromLow the low end of the range the value is within
- * @param fromHigh the high end of the range the value is within
- * @param toLow the low end of the range to map to
- * @param toHigh the high end of the range to map to
- * @return the mapped value
- */
- public static double mapValueFromRangeToRange(
- double value,
- double fromLow,
- double fromHigh,
- double toLow,
- double toHigh) {
- double fromRangeSize = fromHigh - fromLow;
- double toRangeSize = toHigh - toLow;
- double valueScale = (value - fromLow) / fromRangeSize;
- return toLow + (valueScale * toRangeSize);
- }
-
- /**
- * Clamp a value to be within the provided range.
- * @param value the value to clamp
- * @param low the low end of the range
- * @param high the high end of the range
- * @return the clamped value
- */
- public static double clamp(double value, double low, double high) {
- return Math.min(Math.max(value, low), high);
- }
-
- public static int clamp(int value, int low, int high) {
- return Math.min(Math.max(value, low), high);
- }
-
-
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/SteppingLooper.java b/library/src/main/java/com/facebook/rebound/SteppingLooper.java
deleted file mode 100644
index 936f0fb..0000000
--- a/library/src/main/java/com/facebook/rebound/SteppingLooper.java
+++ /dev/null
@@ -1,38 +0,0 @@
-/**
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-package com.facebook.rebound;
-
-public class SteppingLooper extends SpringLooper {
-
- private boolean mStarted;
- private long mLastTime;
-
- @Override
- public void start() {
- mStarted = true;
- mLastTime = 0;
- }
-
- public boolean step(long interval) {
- if (mSpringSystem == null || !mStarted) {
- return false;
- }
- long currentTime = mLastTime + interval;
- mSpringSystem.loop(currentTime);
- mLastTime = currentTime;
- return mSpringSystem.getIsIdle();
- }
-
- @Override
- public void stop() {
- mStarted = false;
- }
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/SynchronousLooper.java b/library/src/main/java/com/facebook/rebound/SynchronousLooper.java
deleted file mode 100644
index 652c3c3..0000000
--- a/library/src/main/java/com/facebook/rebound/SynchronousLooper.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/**
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- */
-
-package com.facebook.rebound;
-
-public class SynchronousLooper extends SpringLooper {
-
- public static double SIXTY_FPS = 16.6667;
- private double mTimeStep;
- private boolean mRunning;
-
- public SynchronousLooper() {
- mTimeStep = SIXTY_FPS;
- }
-
- public double getTimeStep() {
- return mTimeStep;
- }
-
- public void setTimeStep(double timeStep) {
- mTimeStep = timeStep;
- }
-
- @Override
- public void start() {
- mRunning = true;
- while (!mSpringSystem.getIsIdle()) {
- if (mRunning == false) {
- break;
- }
- mSpringSystem.loop(mTimeStep);
- }
- }
-
- @Override
- public void stop() {
- mRunning = false;
- }
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java b/library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
deleted file mode 100644
index 60e1e22..0000000
--- a/library/src/main/java/com/facebook/rebound/ui/SpringConfiguratorView.java
+++ /dev/null
@@ -1,419 +0,0 @@
-/*
- * Copyright (c) 2013, Facebook, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
-
-package com.facebook.rebound.ui;
-
-import android.annotation.TargetApi;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Color;
-import android.os.Build;
-import android.util.AttributeSet;
-import android.view.Gravity;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.AbsListView;
-import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
-import android.widget.LinearLayout;
-import android.widget.SeekBar;
-import android.widget.Spinner;
-import android.widget.TableLayout;
-import android.widget.TextView;
-
-import com.facebook.rebound.OrigamiValueConverter;
-import com.facebook.rebound.Spring;
-import com.facebook.rebound.SpringConfig;
-import com.facebook.rebound.SpringConfigRegistry;
-import com.facebook.rebound.SpringListener;
-import com.facebook.rebound.SpringSystem;
-
-import java.text.DecimalFormat;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-
-import static com.facebook.rebound.ui.Util.*;
-
-/**
- * The SpringConfiguratorView provides a reusable view for live-editing all registered springs
- * within an Application. Each registered Spring can be accessed by its id and its tension and
- * friction properties can be edited while the user tests the effected UI live.
- */
-public class SpringConfiguratorView extends FrameLayout {
-
- private static final int MAX_SEEKBAR_VAL = 100000;
- private static final float MIN_TENSION = 0;
- private static final float MAX_TENSION = 200;
- private static final float MIN_FRICTION = 0;
- private static final float MAX_FRICTION = 50;
- private static final DecimalFormat DECIMAL_FORMAT = new DecimalFormat("#.#");
-
- private final SpinnerAdapter spinnerAdapter;
- private final List mSpringConfigs = new ArrayList();
- private final Spring mRevealerSpring;
- private final float mStashPx;
- private final float mRevealPx;
- private final SpringConfigRegistry springConfigRegistry;
- private final int mTextColor = Color.argb(255, 225, 225, 225);
- private SeekBar mTensionSeekBar;
- private SeekBar mFrictionSeekBar;
- private Spinner mSpringSelectorSpinner;
- private TextView mFrictionLabel;
- private TextView mTensionLabel;
- private SpringConfig mSelectedSpringConfig;
-
- public SpringConfiguratorView(Context context) {
- this(context, null);
- }
-
- public SpringConfiguratorView(Context context, AttributeSet attrs) {
- this(context, attrs, 0);
- }
-
- @TargetApi(Build.VERSION_CODES.HONEYCOMB)
- public SpringConfiguratorView(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
-
- SpringSystem springSystem = SpringSystem.create();
- springConfigRegistry = SpringConfigRegistry.getInstance();
- spinnerAdapter = new SpinnerAdapter(context);
-
- Resources resources = getResources();
- mRevealPx = dpToPx(40, resources);
- mStashPx = dpToPx(280, resources);
-
- mRevealerSpring = springSystem.createSpring();
- SpringListener revealerSpringListener = new RevealerSpringListener();
- mRevealerSpring
- .setCurrentValue(1)
- .setEndValue(1)
- .addListener(revealerSpringListener);
-
- addView(generateHierarchy(context));
-
- SeekbarListener seekbarListener = new SeekbarListener();
- mTensionSeekBar.setMax(MAX_SEEKBAR_VAL);
- mTensionSeekBar.setOnSeekBarChangeListener(seekbarListener);
-
- mFrictionSeekBar.setMax(MAX_SEEKBAR_VAL);
- mFrictionSeekBar.setOnSeekBarChangeListener(seekbarListener);
-
- mSpringSelectorSpinner.setAdapter(spinnerAdapter);
- mSpringSelectorSpinner.setOnItemSelectedListener(new SpringSelectedListener());
- refreshSpringConfigurations();
-
- this.setTranslationY(mStashPx);
- }
-
- /**
- * Programmatically build up the view hierarchy to avoid the need for resources.
- * @return View hierarchy
- */
- private View generateHierarchy(Context context) {
- Resources resources = getResources();
-
- FrameLayout.LayoutParams params;
- int fivePx = dpToPx(5, resources);
- int tenPx = dpToPx(10, resources);
- int twentyPx = dpToPx(20, resources);
- TableLayout.LayoutParams tableLayoutParams = new TableLayout.LayoutParams(
- 0,
- ViewGroup.LayoutParams.WRAP_CONTENT,
- 1f);
- tableLayoutParams.setMargins(0, 0, fivePx, 0);
- LinearLayout seekWrapper;
-
- FrameLayout root = new FrameLayout(context);
- params = createLayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpToPx(300, resources));
- root.setLayoutParams(params);
-
- FrameLayout container = new FrameLayout(context);
- params = createMatchParams();
- params.setMargins(0, twentyPx, 0, 0);
- container.setLayoutParams(params);
- container.setBackgroundColor(Color.argb(100, 0, 0, 0));
- root.addView(container);
-
- mSpringSelectorSpinner = new Spinner(context, Spinner.MODE_DIALOG);
- params = createMatchWrapParams();
- params.gravity = Gravity.TOP;
- params.setMargins(tenPx, tenPx, tenPx, 0);
- mSpringSelectorSpinner.setLayoutParams(params);
- container.addView(mSpringSelectorSpinner);
-
- LinearLayout linearLayout = new LinearLayout(context);
- params = createMatchWrapParams();
- params.setMargins(0, 0, 0, dpToPx(80, resources));
- params.gravity = Gravity.BOTTOM;
- linearLayout.setLayoutParams(params);
- linearLayout.setOrientation(LinearLayout.VERTICAL);
- container.addView(linearLayout);
-
- seekWrapper = new LinearLayout(context);
- params = createMatchWrapParams();
- params.setMargins(tenPx, tenPx, tenPx, twentyPx);
- seekWrapper.setPadding(tenPx, tenPx, tenPx, tenPx);
- seekWrapper.setLayoutParams(params);
- seekWrapper.setOrientation(LinearLayout.HORIZONTAL);
- linearLayout.addView(seekWrapper);
-
- mTensionSeekBar = new SeekBar(context);
- mTensionSeekBar.setLayoutParams(tableLayoutParams);
- seekWrapper.addView(mTensionSeekBar);
-
- mTensionLabel = new TextView(getContext());
- mTensionLabel.setTextColor(mTextColor);
- params = createLayoutParams(
- dpToPx(50, resources),
- ViewGroup.LayoutParams.MATCH_PARENT);
- mTensionLabel.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
- mTensionLabel.setLayoutParams(params);
- mTensionLabel.setMaxLines(1);
- seekWrapper.addView(mTensionLabel);
-
- seekWrapper = new LinearLayout(context);
- params = createMatchWrapParams();
- params.setMargins(tenPx, tenPx, tenPx, twentyPx);
- seekWrapper.setPadding(tenPx, tenPx, tenPx, tenPx);
- seekWrapper.setLayoutParams(params);
- seekWrapper.setOrientation(LinearLayout.HORIZONTAL);
- linearLayout.addView(seekWrapper);
-
- mFrictionSeekBar = new SeekBar(context);
- mFrictionSeekBar.setLayoutParams(tableLayoutParams);
- seekWrapper.addView(mFrictionSeekBar);
-
- mFrictionLabel = new TextView(getContext());
- mFrictionLabel.setTextColor(mTextColor);
- params = createLayoutParams(dpToPx(50, resources), ViewGroup.LayoutParams.MATCH_PARENT);
- mFrictionLabel.setGravity(Gravity.CENTER_VERTICAL | Gravity.LEFT);
- mFrictionLabel.setLayoutParams(params);
- mFrictionLabel.setMaxLines(1);
- seekWrapper.addView(mFrictionLabel);
-
- View nub = new View(context);
- params = createLayoutParams(dpToPx(60, resources), dpToPx(40, resources));
- params.gravity = Gravity.TOP | Gravity.CENTER;
- nub.setLayoutParams(params);
- nub.setOnTouchListener(new OnNubTouchListener());
- nub.setBackgroundColor(Color.argb(255, 0, 164, 209));
- root.addView(nub);
-
- return root;
- }
-
- /**
- * remove the configurator from its parent and clean up springs and listeners
- */
- public void destroy() {
- ViewGroup parent = (ViewGroup) getParent();
- if (parent != null) {
- parent.removeView(this);
- }
- mRevealerSpring.destroy();
- }
-
- /**
- * reload the springs from the registry and update the UI
- */
- public void refreshSpringConfigurations() {
- Map springConfigMap = springConfigRegistry.getAllSpringConfig();
-
- spinnerAdapter.clear();
- mSpringConfigs.clear();
-
- for (Map.Entry entry : springConfigMap.entrySet()) {
- if (entry.getKey() == SpringConfig.defaultConfig) {
- continue;
- }
- mSpringConfigs.add(entry.getKey());
- spinnerAdapter.add(entry.getValue());
- }
- // Add the default config in last.
- mSpringConfigs.add(SpringConfig.defaultConfig);
- spinnerAdapter.add(springConfigMap.get(SpringConfig.defaultConfig));
- spinnerAdapter.notifyDataSetChanged();
- if (mSpringConfigs.size() > 0) {
- mSpringSelectorSpinner.setSelection(0);
- }
- }
-
- private class SpringSelectedListener implements AdapterView.OnItemSelectedListener {
-
- @Override
- public void onItemSelected(AdapterView> adapterView, View view, int i, long l) {
- mSelectedSpringConfig = mSpringConfigs.get(i);
- updateSeekBarsForSpringConfig(mSelectedSpringConfig);
- }
-
- @Override
- public void onNothingSelected(AdapterView> adapterView) {
- }
- }
-
- /**
- * listen to events on seekbars and update registered springs accordingly
- */
- private class SeekbarListener implements SeekBar.OnSeekBarChangeListener {
-
- @Override
- public void onProgressChanged(SeekBar seekBar, int val, boolean b) {
- float tensionRange = MAX_TENSION - MIN_TENSION;
- float frictionRange = MAX_FRICTION - MIN_FRICTION;
-
- if (seekBar == mTensionSeekBar) {
- float scaledTension = ((val) * tensionRange) / MAX_SEEKBAR_VAL + MIN_TENSION;
- mSelectedSpringConfig.tension =
- OrigamiValueConverter.tensionFromOrigamiValue(scaledTension);
- String roundedTensionLabel = DECIMAL_FORMAT.format(scaledTension);
- mTensionLabel.setText("T:" + roundedTensionLabel);
- }
-
- if (seekBar == mFrictionSeekBar) {
- float scaledFriction = ((val) * frictionRange) / MAX_SEEKBAR_VAL + MIN_FRICTION;
- mSelectedSpringConfig.friction =
- OrigamiValueConverter.frictionFromOrigamiValue(scaledFriction);
- String roundedFrictionLabel = DECIMAL_FORMAT.format(scaledFriction);
- mFrictionLabel.setText("F:" + roundedFrictionLabel);
- }
- }
-
- @Override
- public void onStartTrackingTouch(SeekBar seekBar) {
- }
-
- @Override
- public void onStopTrackingTouch(SeekBar seekBar) {
- }
- }
-
- /**
- * update the position of the seekbars based on the spring value;
- * @param springConfig current editing spring
- */
- private void updateSeekBarsForSpringConfig(SpringConfig springConfig) {
- float tension = (float) OrigamiValueConverter.origamiValueFromTension(springConfig.tension);
- float tensionRange = MAX_TENSION - MIN_TENSION;
- int scaledTension = Math.round(((tension - MIN_TENSION) * MAX_SEEKBAR_VAL) / tensionRange);
-
- float friction = (float) OrigamiValueConverter.origamiValueFromFriction(springConfig.friction);
- float frictionRange = MAX_FRICTION - MIN_FRICTION;
- int scaledFriction = Math.round(((friction - MIN_FRICTION) * MAX_SEEKBAR_VAL) / frictionRange);
-
- mTensionSeekBar.setProgress(scaledTension);
- mFrictionSeekBar.setProgress(scaledFriction);
- }
-
- /**
- * toggle visibility when the nub is tapped.
- */
- private class OnNubTouchListener implements View.OnTouchListener {
- @Override
- public boolean onTouch(View view, MotionEvent motionEvent) {
- if (motionEvent.getAction() == MotionEvent.ACTION_DOWN) {
- togglePosition();
- }
- return true;
- }
- }
-
- private void togglePosition() {
- double currentValue = mRevealerSpring.getEndValue();
- mRevealerSpring
- .setEndValue(currentValue == 1 ? 0 : 1);
- }
-
- private class RevealerSpringListener implements SpringListener {
-
- @Override
- public void onSpringUpdate(Spring spring) {
- float val = (float) spring.getCurrentValue();
- float minTranslate = mRevealPx;
- float maxTranslate = mStashPx;
- float range = maxTranslate - minTranslate;
- float yTranslate = (val * range) + minTranslate;
- SpringConfiguratorView.this.setTranslationY(yTranslate);
- }
-
- @Override
- public void onSpringAtRest(Spring spring) {
- }
-
- @Override
- public void onSpringActivate(Spring spring) {
- }
-
- @Override
- public void onSpringEndStateChange(Spring spring) {
- }
- }
-
- private class SpinnerAdapter extends BaseAdapter {
-
- private final Context mContext;
- private final List mStrings;
-
- public SpinnerAdapter(Context context) {
- mContext = context;
- mStrings = new ArrayList();
- }
-
- @Override
- public int getCount() {
- return mStrings.size();
- }
-
- @Override
- public Object getItem(int position) {
- return mStrings.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- public void add(String string) {
- mStrings.add(string);
- notifyDataSetChanged();
- }
-
- /**
- * Remove all elements from the list.
- */
- public void clear() {
- mStrings.clear();
- notifyDataSetChanged();
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- TextView textView;
- if (convertView == null) {
- textView = new TextView(mContext);
- AbsListView.LayoutParams params = new AbsListView.LayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT);
- textView.setLayoutParams(params);
- int twelvePx = dpToPx(12, getResources());
- textView.setPadding(twelvePx, twelvePx, twelvePx, twelvePx);
- textView.setTextColor(mTextColor);
- } else {
- textView = (TextView) convertView;
- }
- textView.setText(mStrings.get(position));
- return textView;
- }
- }
-}
-
diff --git a/library/src/main/java/com/facebook/rebound/ui/Util.java b/library/src/main/java/com/facebook/rebound/ui/Util.java
deleted file mode 100644
index e1d7134..0000000
--- a/library/src/main/java/com/facebook/rebound/ui/Util.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package com.facebook.rebound.ui;
-
-import android.content.res.Resources;
-import android.util.TypedValue;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.RelativeLayout;
-
-/**
- * Utilities for generating view hierarchies without using resources.
- */
-public abstract class Util {
-
- public static final int dpToPx(float dp, Resources res) {
- return (int) TypedValue.applyDimension(
- TypedValue.COMPLEX_UNIT_DIP,
- dp,
- res.getDisplayMetrics());
- }
-
- public static final FrameLayout.LayoutParams createLayoutParams(int width, int height) {
- return new FrameLayout.LayoutParams(width, height);
- }
-
- public static final FrameLayout.LayoutParams createMatchParams() {
- return createLayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.MATCH_PARENT);
- }
-
- public static final FrameLayout.LayoutParams createWrapParams() {
- return createLayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- }
-
- public static final FrameLayout.LayoutParams createWrapMatchParams() {
- return createLayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.MATCH_PARENT);
- }
-
- public static final FrameLayout.LayoutParams createMatchWrapParams() {
- return createLayoutParams(
- ViewGroup.LayoutParams.MATCH_PARENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
- }
-
-}
From 2b21c5aac23194132f4c1b8b3904243244c3afa3 Mon Sep 17 00:00:00 2001
From: msdx <645079761@qq.com>
Date: Sat, 24 Sep 2016 20:48:27 +0800
Subject: [PATCH 15/16] Move images referenced by README into 'images' folder
---
README.md | 4 ++--
{sample => images}/21879.gif | Bin
{sample => images}/device-2014-08-31-231538.png | Bin
sample/ic_launcher-web.png | Bin 51394 -> 0 bytes
4 files changed, 2 insertions(+), 2 deletions(-)
rename {sample => images}/21879.gif (100%)
rename {sample => images}/device-2014-08-31-231538.png (100%)
delete mode 100644 sample/ic_launcher-web.png
diff --git a/README.md b/README.md
index d6d5144..600c32a 100644
--- a/README.md
+++ b/README.md
@@ -3,7 +3,7 @@ ToggleButton
ToggleButton Widget For Android Developers
-
+
How To Use
```xml
@@ -47,7 +47,7 @@ ToggleButton Widget For Android Developers
Default Size:width=50dp,height=30dp.
-
+
引用方式
```
diff --git a/sample/21879.gif b/images/21879.gif
similarity index 100%
rename from sample/21879.gif
rename to images/21879.gif
diff --git a/sample/device-2014-08-31-231538.png b/images/device-2014-08-31-231538.png
similarity index 100%
rename from sample/device-2014-08-31-231538.png
rename to images/device-2014-08-31-231538.png
diff --git a/sample/ic_launcher-web.png b/sample/ic_launcher-web.png
deleted file mode 100644
index a18cbb48c431dfcc163fce2b6e27e981f8c09f6a..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001
literal 51394
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