Explore canvas + part solution.

This commit is contained in:
kenkeiras 2017-07-03 23:25:25 +02:00
parent 389796649f
commit bc33baca27
4 changed files with 143 additions and 2 deletions

View File

@ -4,20 +4,34 @@ import android.content.Context;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Paint; import android.graphics.Paint;
import android.util.Log;
import android.view.View; import android.view.View;
import com.codigoparallevar.minicards.parts.Part;
import com.codigoparallevar.minicards.parts.Placeholder;
import com.codigoparallevar.minicards.parts.buttons.RoundButton;
import java.util.LinkedList;
import java.util.List;
class DrawView extends View { class DrawView extends View {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
List<Part> parts = new LinkedList<>();
public DrawView(Context context) { public DrawView(Context context) {
super(context); super(context);
paint.setColor(Color.RED); paint.setColor(Color.RED);
parts.add(new RoundButton(500, 1200, 80, 100));
} }
@Override @Override
public void onDraw(Canvas canvas){ public void onDraw(Canvas canvas){
canvas.drawLine(0, 0, 20, 20, paint); long time = System.currentTimeMillis();
canvas.drawLine(20, 0, 0, 20, paint); for (Part part : parts){
part.draw(canvas);
}
Log.d("Render time", System.currentTimeMillis() - time + "ms");
} }
} }

View File

@ -0,0 +1,12 @@
package com.codigoparallevar.minicards.parts;
import android.graphics.Canvas;
public interface Part {
public int getLeft();
public int getRight();
public int getTop();
public int getBottom();
public void draw(Canvas canvas);
}

View File

@ -0,0 +1,58 @@
package com.codigoparallevar.minicards.parts;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
public class Placeholder implements Part {
private final int _left;
private final int _top;
private final int _right;
private final int _bottom;
public Placeholder(int left, int top, int right, int bottom) {
_left = left;
_top = top;
_right = right;
_bottom = bottom;
}
@Override
public int getLeft() {
return _left;
}
@Override
public int getRight() {
return _right;
}
@Override
public int getTop() {
return _top;
}
@Override
public int getBottom() {
return _bottom;
}
@Override
public void draw(Canvas canvas) {
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
paint.setColor(Color.WHITE);
// Top
canvas.drawLine(_left,_top, _right, _top, paint);
// Bottom
canvas.drawLine(_left, _bottom, _right, _bottom, paint);
// Left
canvas.drawLine(_left, _top, _left, _bottom, paint);
// Right
canvas.drawLine(_right, _top, _right, _bottom, paint);
// Cross, top-left, bottom-right
canvas.drawLine(_left, _top, _right, _bottom, paint);
// Cross, top-right, bottom-left
canvas.drawLine(_right, _top, _left, _bottom, paint);
}
}

View File

@ -0,0 +1,57 @@
package com.codigoparallevar.minicards.parts.buttons;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import com.codigoparallevar.minicards.parts.Part;
public class RoundButton implements Part {
private final int _xCenter;
private final int _yCenter;
private final int _innerRadius;
private final int _outerRadius;
private final int _outerRadiusThickness = 10;
public RoundButton(int xCenter, int yCenter, int innerRadius, int outerRadius) {
_xCenter = xCenter;
_yCenter = yCenter;
_innerRadius = innerRadius;
_outerRadius = outerRadius;
}
@Override
public int getLeft() {
return _xCenter - _outerRadius / 2;
}
@Override
public int getRight() {
return _xCenter + _outerRadius / 2;
}
@Override
public int getTop() {
return _yCenter - _outerRadius / 2;
}
@Override
public int getBottom() {
return _yCenter + _outerRadius / 2;
}
@Override
public void draw(Canvas canvas) {
Paint foregroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
foregroundPaint.setColor(Color.WHITE);
Paint backgroundPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
backgroundPaint.setColor(Color.BLACK);
canvas.drawCircle(_xCenter, _yCenter, _outerRadius, foregroundPaint);
canvas.drawCircle(_xCenter, _yCenter, _outerRadius - _outerRadiusThickness, backgroundPaint);
canvas.drawCircle(_xCenter, _yCenter, _innerRadius, foregroundPaint);
}
}