package de.jkliemann.parkendd;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.RectF;
import android.graphics.drawable.Drawable;
/**
* Created by jkliemann on 17.11.15.
*/
public class SpotIcon extends Drawable {
ParkingSpot spot;
private final Paint red;
private final Paint green;
private final Paint blue;
private final Paint black;
private Context context;
private int size;
public SpotIcon(ParkingSpot spot, Context context){
this.spot = spot;
red = new Paint();
red.setColor(Color.argb(0xff, 0xef, 0x53, 0x50));
green = new Paint();
green.setColor(Color.argb(0xff, 0x66, 0xbb, 0x6a));
blue = new Paint();
blue.setColor(Color.argb(0xff, 0x42, 0xa5, 0xf5));
black = new Paint();
black.setColor(Color.argb(0xff, 0x00, 0x00, 0x00));
this.context = context;
size = (int)context.getResources().getDisplayMetrics().density * 20;
}
@Override
public void draw(Canvas canvas){
RectF oval = new RectF(0, 0, size, size);
switch (this.spot.state()) {
case "closed":
canvas.drawArc(oval, 0, 360, true, black);
break;
case "nodata":
canvas.drawArc(oval, 0, 360, true, blue);
break;
default:
float free = 360 * ((float)this.spot.free()/(float)this.spot.count());
if(free > 360){
free = 360;
}
canvas.drawArc(oval,- 90, free, true, green);
canvas.drawArc(oval, free - 90, 360 - free, true, red);
}
}
@Override
protected boolean onLevelChange(int level){
invalidateSelf();
return true;
}
@Override
public void setAlpha(int alpha){
}
@Override
public void setColorFilter(ColorFilter cf){
}
public int getOpacity(){
return PixelFormat.TRANSLUCENT;
}
public Drawable getBitmapDrawable(){
Bitmap bmp = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(bmp);
this.setBounds(0, 0, size, size);
this.draw(canvas);
SpotIconBitmap bmpd = new SpotIconBitmap(context.getResources(), bmp);
bmpd.setSpot(this.spot);
return bmpd;
}
public ParkingSpot getSpot(){
return this.spot;
}
}