-
Notifications
You must be signed in to change notification settings - Fork 51
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #9 from dgmltn/TrianglifyDrawable
Extracted drawable out of TrianglifyView into TrianglifyDrawable
- Loading branch information
Showing
4 changed files
with
189 additions
and
113 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
119 changes: 119 additions & 0 deletions
119
trianglify/src/main/java/com/manolovn/trianglify/TrianglifyDrawable.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,119 @@ | ||
package com.manolovn.trianglify; | ||
|
||
import java.util.Vector; | ||
|
||
import android.graphics.Canvas; | ||
import android.graphics.ColorFilter; | ||
import android.graphics.PixelFormat; | ||
import android.graphics.Rect; | ||
import android.graphics.drawable.Drawable; | ||
import android.os.AsyncTask; | ||
|
||
import com.manolovn.colorbrewer.ColorBrewer; | ||
import com.manolovn.trianglify.domain.Point; | ||
import com.manolovn.trianglify.domain.Triangle; | ||
import com.manolovn.trianglify.generator.color.BrewerColorGenerator; | ||
import com.manolovn.trianglify.generator.point.RegularPointGenerator; | ||
import com.manolovn.trianglify.renderer.TriangleRenderer; | ||
import com.manolovn.trianglify.triangulator.DelaunayTriangulator; | ||
import com.manolovn.trianglify.triangulator.Triangulator; | ||
|
||
/** | ||
* Created by doug on 3/17/16. | ||
*/ | ||
public class TrianglifyDrawable extends Drawable { | ||
|
||
private RegularPointGenerator pointGenerator; | ||
private Triangulator triangulator; | ||
private TriangleRenderer triangleRenderer; | ||
|
||
private int width; | ||
private int height; | ||
|
||
private Vector<Point> points; | ||
private Vector<Triangle> triangles; | ||
|
||
// Used with triangulateInBackground | ||
Boolean ready = false; | ||
|
||
public TrianglifyDrawable(int cellSize, int variance, int bleedX, int bleedY) { | ||
super(); | ||
|
||
pointGenerator = new RegularPointGenerator(cellSize, variance); | ||
pointGenerator.setBleedX(bleedX); | ||
pointGenerator.setBleedY(bleedY); | ||
triangulator = new DelaunayTriangulator(); | ||
triangleRenderer = new TriangleRenderer(); | ||
} | ||
|
||
@Override | ||
protected void onBoundsChange(Rect bounds) { | ||
this.width = bounds.width(); | ||
this.height = bounds.height(); | ||
triangulateInBackground(); | ||
} | ||
|
||
@Override | ||
public void draw(Canvas canvas) { | ||
if (ready) { | ||
triangleRenderer.render(triangles, canvas); | ||
} | ||
} | ||
|
||
@Override | ||
public void setAlpha(int alpha) { | ||
|
||
} | ||
|
||
@Override | ||
public void setColorFilter(ColorFilter colorFilter) { | ||
|
||
} | ||
|
||
@Override | ||
public int getOpacity() { | ||
return PixelFormat.OPAQUE; | ||
} | ||
|
||
public void setVariance(int variance) { | ||
pointGenerator.setVariance(variance); | ||
triangulateInBackground(); | ||
} | ||
|
||
public void setCellSize(int cellSize) { | ||
pointGenerator.setCellSize(cellSize); | ||
triangulateInBackground(); | ||
} | ||
|
||
public void setColor(ColorBrewer color) { | ||
triangleRenderer = new TriangleRenderer(new BrewerColorGenerator(color)); | ||
triangulateInBackground(); | ||
} | ||
|
||
private void triangulateInBackground() { | ||
TriangulateAsyncTask task = new TriangulateAsyncTask(); | ||
task.execute(); | ||
} | ||
|
||
private Object lock = new Object(); | ||
|
||
private class TriangulateAsyncTask extends AsyncTask<Void, Void, Void> { | ||
|
||
@Override | ||
protected Void doInBackground(Void... params) { | ||
synchronized (lock) { | ||
ready = false; | ||
points = pointGenerator.generatePoints(width, height); | ||
triangles = triangulator.triangulate(points); | ||
ready = true; | ||
} | ||
return null; | ||
} | ||
|
||
@Override | ||
protected void onPostExecute(Void aVoid) { | ||
invalidateSelf(); | ||
} | ||
} | ||
|
||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters