diff --git a/base/base.iml b/base/base.iml
index 0cd98b1..6bc297b 100644
--- a/base/base.iml
+++ b/base/base.iml
@@ -12,10 +12,7 @@
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -29,19 +26,21 @@
-
+
+
+
@@ -51,6 +50,15 @@
+
+
+
+
+
+
+
+
+
@@ -58,6 +66,15 @@
+
+
+
+
+
+
+
+
+
@@ -65,19 +82,27 @@
+
-
+
+
+
+
+
+
+
+
@@ -85,7 +110,9 @@
+
+
diff --git a/bom/bom.iml b/bom/bom.iml
index 521bfa3..8d8c196 100644
--- a/bom/bom.iml
+++ b/bom/bom.iml
@@ -12,10 +12,7 @@
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -29,19 +26,21 @@
-
+
+
+
@@ -51,6 +50,15 @@
+
+
+
+
+
+
+
+
+
@@ -58,6 +66,7 @@
+
@@ -65,8 +74,16 @@
+
+
+
+
+
+
+
+
+
-
@@ -76,12 +93,16 @@
+
+
+
+
@@ -89,7 +110,9 @@
+
+
diff --git a/bom/src/main/java/owo/bom/splash/BaseDrawer.java b/bom/src/main/java/owo/bom/splash/BaseDrawer.java
index b5619b4..28eb0eb 100644
--- a/bom/src/main/java/owo/bom/splash/BaseDrawer.java
+++ b/bom/src/main/java/owo/bom/splash/BaseDrawer.java
@@ -7,7 +7,7 @@
* Created by wangli on 9/17/16.
*/
public abstract class BaseDrawer implements Drawer {
- protected Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+ public Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
public BaseDrawer() {
mPaint.setColor(Color.RED);
diff --git a/demo/demo.iml b/demo/demo.iml
index dc70268..f15963b 100644
--- a/demo/demo.iml
+++ b/demo/demo.iml
@@ -12,10 +12,7 @@
-
-
- generateDebugAndroidTestSources
generateDebugSources
@@ -28,19 +25,22 @@
-
+
+
+
+
@@ -50,6 +50,15 @@
+
+
+
+
+
+
+
+
+
@@ -57,6 +66,7 @@
+
@@ -64,18 +74,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -85,9 +115,16 @@
+
+
+
+
+
+
+
diff --git a/demo/src/main/java/com/owo/bom/fish_tank/FishTank.java b/demo/src/main/java/com/owo/bom/fish_tank/FishTank.java
new file mode 100644
index 0000000..d328e5e
--- /dev/null
+++ b/demo/src/main/java/com/owo/bom/fish_tank/FishTank.java
@@ -0,0 +1,74 @@
+package com.owo.bom.fish_tank;
+
+import android.content.Context;
+import android.view.Gravity;
+import android.widget.FrameLayout;
+
+import com.owo.bom.bezier.impl.WaveView;
+import com.owo.bom.lace.impl.CircleProgressView;
+
+/**
+ * Created by wangli on 11/8/16.
+ */
+
+public class FishTank extends FrameLayout {
+ private WaveView mWaveView;
+ private WaterGrassGroupDrawerView mLeftGrass;
+ private WaterGrassGroupDrawerView mRightGrass;
+ private PerlView mPerl;
+ private CircleProgressView mCircle;
+
+ public FishTank(Context context) {
+ super(context);
+ mWaveView = new WaveView(context);
+ mLeftGrass = new WaterGrassGroupDrawerView(context, 3);
+ mRightGrass = new WaterGrassGroupDrawerView(context, 5);
+ mPerl = new PerlView(context);
+ mCircle = new CircleProgressView(context);
+
+ addView(mWaveView);
+ addView(mLeftGrass);
+ addView(mRightGrass);
+ addView(mPerl);
+ addView(mCircle);
+ }
+
+ private void setupLayout() {
+ int grassWidth = getWidth() / 4;
+ {
+ FrameLayout.LayoutParams lp =
+ new FrameLayout.LayoutParams(grassWidth, getHeight() / 2, Gravity.LEFT | Gravity.BOTTOM);
+ mLeftGrass.setLayoutParams(lp);
+ }
+ {
+ FrameLayout.LayoutParams lp =
+ new FrameLayout.LayoutParams(grassWidth, getHeight() / 2, Gravity.RIGHT | Gravity.BOTTOM);
+ lp.rightMargin = getWidth() / 10;
+ mRightGrass.setLayoutParams(lp);
+ }
+ {
+ FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(getWidth() / 2,
+ getWidth() / 2,
+ Gravity.RIGHT | Gravity.BOTTOM);
+// lp.rightMargin = -getWidth() / 4;
+// lp.bottomMargin = -getWidth() / 4;
+ mPerl.setLayoutParams(lp);
+ }
+
+ {
+ FrameLayout.LayoutParams lp =
+ new FrameLayout.LayoutParams(getWidth() / 2, getWidth() / 2, Gravity.BOTTOM);
+ lp.bottomMargin = getWidth() / 4;
+ mCircle.setLayoutParams(lp);
+ }
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ if (w == 0 || h == 0) {
+ return;
+ }
+ setupLayout();
+ }
+}
diff --git a/demo/src/main/java/com/owo/bom/fish_tank/PerlView.java b/demo/src/main/java/com/owo/bom/fish_tank/PerlView.java
new file mode 100644
index 0000000..423345e
--- /dev/null
+++ b/demo/src/main/java/com/owo/bom/fish_tank/PerlView.java
@@ -0,0 +1,56 @@
+package com.owo.bom.fish_tank;
+
+import android.animation.ObjectAnimator;
+import android.animation.PropertyValuesHolder;
+import android.animation.ValueAnimator;
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.PointF;
+
+import com.owo.bom.base.SelfDrawView;
+
+import owo.bom.drawer.FlowerDrawer;
+
+/**
+ * Created by wangli on 11/8/16.
+ */
+
+public class PerlView extends SelfDrawView {
+ private FlowerDrawer mDrawer = new FlowerDrawer(null);
+
+ public PerlView(Context context) {
+ super(context);
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ if (mDrawer == null || w == 0 || h == 0) {
+ return;
+ }
+ mDrawer.center(new PointF(getWidth(), getHeight())).setN(10);
+ PropertyValuesHolder rHolder =
+ PropertyValuesHolder.ofFloat("rIn", 0, (getWidth() / 2) - 10);
+ PropertyValuesHolder RHolder = PropertyValuesHolder.ofFloat("rOut", 0, getWidth() / 2);
+ ObjectAnimator oa = ObjectAnimator.ofPropertyValuesHolder(mDrawer, rHolder, RHolder);
+ oa.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ postInvalidate();
+ }
+ });
+ oa.setDuration(4000);
+ oa.setRepeatCount(ValueAnimator.INFINITE);
+ oa.start();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ mDrawer.mPaint.setColor(Color.YELLOW);
+ mDrawer.mPaint.setStyle(Paint.Style.FILL);
+ mDrawer.draw(canvas);
+ }
+
+}
diff --git a/demo/src/main/java/com/owo/bom/fish_tank/WaterGrassDrawer.java b/demo/src/main/java/com/owo/bom/fish_tank/WaterGrassDrawer.java
new file mode 100644
index 0000000..53580b4
--- /dev/null
+++ b/demo/src/main/java/com/owo/bom/fish_tank/WaterGrassDrawer.java
@@ -0,0 +1,149 @@
+package com.owo.bom.fish_tank;
+
+import android.graphics.Camera;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Path;
+import android.graphics.Point;
+
+import owo.bom.splash.Drawer;
+
+/**
+ * Created by wangli on 11/8/16.
+ */
+
+public class WaterGrassDrawer implements Drawer {
+ private Path mPath = new Path();
+ private Paint mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+
+ public WaterGrassDrawer() {
+ mPaint.setStyle(Paint.Style.FILL);
+ mPaint.setColor(Color.GREEN);
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ if (mDirection == DIRECTION_LEFT) {
+ Camera camera = new Camera();
+ camera.translate(mWidth, 0, 0);
+ camera.rotate(0, 180, 0);
+ camera.applyToCanvas(canvas);
+ }
+ doDraw(canvas);
+
+ }
+
+ private int mWidth, mHeight;
+ private int mControlDeltaX;
+ private int mControlDeltaY;
+ private int mN = 8;
+ private int m2WOffset;
+ private int m2HOffset;
+ private Point[] mPoints;
+ private Point[] mPoints2;
+ public static final int DIRECTION_LEFT = 1;
+ public static final int DIRECTION_RIGHT = 2;
+ private int mDirection = DIRECTION_RIGHT;
+
+ public void setDirection(int direction) {
+ mDirection = direction;
+ }
+
+ public void setN(int n) {
+ mPoints = null;
+ mN = n;
+ }
+
+ public void setW(int w) {
+ mPoints = null;
+ m2WOffset = w;
+ }
+
+ public void setH(int h) {
+ mPoints = null;
+ m2HOffset = h;
+ }
+
+ public void setControlX(int cx) {
+ mPoints = null;
+ mControlDeltaX = cx;
+ }
+
+ public void setWidth(int width) {
+ mWidth = width;
+ }
+
+ public void setHeight(int height) {
+ mHeight = height;
+ }
+
+ private void computePoints() {
+ mControlDeltaX = mWidth / (mN);
+ m2WOffset = mWidth / mN;
+ m2HOffset = mHeight / mN;
+ mPoints = new Point[mN];
+ mPoints2 = new Point[mN];
+ mPoints[0] = new Point(0, mHeight);
+ mPoints2[0] = mPoints[0];
+ int deltaX = mWidth / (mN);
+ int deltaY = mHeight / (mN);
+ for (int i = 0; i < mN; ++i) {
+ int ratio = 0;
+ if (i != 0 && i != mN - 1) {
+ ratio = (i % 2 == 0) ? 1 : -1;
+ }
+ mPoints[i] = new Point(i * deltaX + mControlDeltaX * ratio,
+ mHeight - (i * deltaY + mControlDeltaY * ratio));
+ if (i != mN - 1) {
+ mPoints2[i] = new Point(mPoints[i].x + m2WOffset, mPoints[i].y + m2HOffset);
+ } else {
+ mPoints2[i] = new Point(mPoints[i].x, mPoints[i].y);
+ }
+ }
+ }
+
+ private void doDraw(Canvas canvas) {
+ if (mPoints == null) {
+ computePoints();
+ reverse(mPoints2);
+ }
+ for (int i = 0; i < mPoints.length; i++) {
+ canvas.drawCircle(mPoints[i].x, mPoints[i].y, 5, mPaint);
+ }
+
+ for (int i = 0; i < mPoints2.length; i++) {
+ canvas.drawCircle(mPoints2[i].x, mPoints2[i].y, 5, mPaint);
+ }
+
+ mPath.reset();
+ mPath.moveTo((float) mPoints[0].x, (float) mPoints[0].y);
+ addBezierToPath(mPoints, mPath);
+ addBezierToPath(mPoints2, mPath);
+ canvas.drawPath(mPath, mPaint);
+ }
+
+
+ private void reverse(T[] array) {
+ for (int i = 0; i < array.length / 2; i++) {
+ T tmp = array[i];
+ array[i] = array[array.length - 1 - i];
+ array[array.length - 1 - i] = tmp;
+ }
+ }
+
+
+ private void addBezierToPath(Point[] pts, Path path) {
+ for (int i = 1; i < pts.length; i++) {
+ float endx, endy;
+ if (i == pts.length - 1) {
+ endx = pts[i].x;
+ endy = pts[i].y;
+ } else {
+ endx = (pts[i + 1].x + pts[i].x) / 2;
+ endy = (pts[i + 1].y + pts[i].y) / 2;
+ }
+ path.quadTo(pts[i].x, pts[i].y, endx, endy);
+ }
+ }
+}
diff --git a/demo/src/main/java/com/owo/bom/fish_tank/WaterGrassGroupDrawerView.java b/demo/src/main/java/com/owo/bom/fish_tank/WaterGrassGroupDrawerView.java
new file mode 100644
index 0000000..13b69a2
--- /dev/null
+++ b/demo/src/main/java/com/owo/bom/fish_tank/WaterGrassGroupDrawerView.java
@@ -0,0 +1,56 @@
+package com.owo.bom.fish_tank;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.widget.FrameLayout;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+/**
+ * Created by wangli on 11/8/16.
+ */
+
+public class WaterGrassGroupDrawerView extends FrameLayout {
+ private List mDrawers = new ArrayList<>();
+
+ public WaterGrassGroupDrawerView(Context context) {
+ this(context, 5);
+ }
+
+ public WaterGrassGroupDrawerView(Context context, int n) {
+ super(context);
+ for (int i = 0; i < n; i++) {
+ WaterGrassDrawer drawer = new WaterGrassDrawer();
+ if (i < n / 2) {
+ drawer.setDirection(WaterGrassDrawer.DIRECTION_LEFT);
+ }
+ mDrawers.add(drawer);
+ }
+ }
+
+ private Random mRandom = new Random(System.currentTimeMillis());
+
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ super.dispatchDraw(canvas);
+ if (getWidth() == 0) {
+ return;
+ }
+
+ int viewWidth = getWidth() / mDrawers.size();
+ for (int i = 0; i < mDrawers.size(); i++) {
+ canvas.save();
+ WaterGrassDrawer drawer = mDrawers.get(i);
+ int n = mRandom.nextInt(1000) % 10;
+ n = (n <= 5) ? 5 : n;
+ drawer.setN(n);
+ drawer.setWidth(viewWidth);
+ drawer.setHeight(getHeight());
+ canvas.translate(viewWidth * i, 0);
+ drawer.draw(canvas);
+ canvas.restore();
+ }
+ }
+}
diff --git a/demo/src/main/java/com/owo/bom/lace/impl/CircleProgressView.java b/demo/src/main/java/com/owo/bom/lace/impl/CircleProgressView.java
index 7544602..ea5292e 100644
--- a/demo/src/main/java/com/owo/bom/lace/impl/CircleProgressView.java
+++ b/demo/src/main/java/com/owo/bom/lace/impl/CircleProgressView.java
@@ -34,7 +34,6 @@ public void run() {
angle += 0.1;
if (angle > Math.PI * 2) {
angle = 0;
- return;
}
postInvalidate();
@@ -52,11 +51,19 @@ int compute() {
return 0;
}
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ R = getWidth() / 3;
+ r1 = R / 10;
+ r2 = R / 8;
+ }
+
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
Camera camera = new Camera();
- camera.rotate(20,20,20);
+ camera.rotate(0, 20, 0);
camera.applyToCanvas(canvas);
float centerX = getWidth() / 2;
float centerY = getHeight() / 2;
diff --git a/demo/src/main/java/com/owo/bom/main/MainActivity.java b/demo/src/main/java/com/owo/bom/main/MainActivity.java
index 975d6a8..3333cdb 100644
--- a/demo/src/main/java/com/owo/bom/main/MainActivity.java
+++ b/demo/src/main/java/com/owo/bom/main/MainActivity.java
@@ -12,8 +12,8 @@
import com.owo.bom.base.DataItem;
import com.owo.bom.base.ListDataAdapter;
import com.owo.bom.bezier.BezierActivity;
+import com.owo.bom.fish_tank.FishTank;
import com.owo.bom.lace.LaceActivity;
-import com.owo.bom.lace.impl.CircleProgressView;
import java.util.ArrayList;
import java.util.List;
@@ -67,7 +67,7 @@ public void onItemClick(AdapterView> parent, View view, int position, long id)
// setContentView(view);
// setContentView(new BezierView(this));
- setContentView(new CircleProgressView(this));
+ setContentView(new FishTank(this));
}
private List setupListData() {
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index f23df6e..f0a4986 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Wed Oct 21 11:34:03 PDT 2015
+#Tue Nov 08 09:18:50 CST 2016
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip