package com.bootstrap.widget;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.LightingColorFilter;
import android.graphics.Paint;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import com.bootstrap.R;
public final class FloatingButton extends View {
private int iconX, iconY;
private Bitmap shadow;
private Bitmap button;
private Bitmap icon;
private Paint buttonPaint;
private LightingColorFilter filter1;
private LightingColorFilter filter2;
public FloatingButton(final Context context) {
super(context);
init();
}
public FloatingButton(final Context context, final AttributeSet attrs) {
super(context, attrs);
init();
}
public FloatingButton(final Context context, final AttributeSet attrs, final int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();
}
public void setup(final int resId, final int color1, final int color2) {
filter1 = new LightingColorFilter(color1, 0);
filter2 = new LightingColorFilter(color2, 0);
icon = BitmapFactory.decodeResource(getResources(), resId);
buttonPaint.setColorFilter(filter1);
iconX = (button.getWidth() - icon.getWidth()) / 2;
iconY = (button.getHeight() - icon.getHeight()) / 2;
invalidate();
}
private void init() {
buttonPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
shadow = BitmapFactory.decodeResource(getResources(), R.drawable.float_shadow);
button = BitmapFactory.decodeResource(getResources(), R.drawable.float_circle);
}
public int getSize() {
return button.getWidth();
}
@Override protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
final int desiredHSpec = MeasureSpec.makeMeasureSpec(button.getHeight(), MeasureSpec.EXACTLY);
final int desiredWSpec = MeasureSpec.makeMeasureSpec(button.getWidth(), MeasureSpec.EXACTLY);
setMeasuredDimension(desiredWSpec, desiredHSpec);
}
@Override protected void onDraw(final Canvas canvas) {
canvas.drawBitmap(shadow, 0, 0, null);
canvas.drawBitmap(button, 0, 0, buttonPaint);
if (icon != null) {
canvas.drawBitmap(icon, iconX, iconY, null);
}
}
@Override public boolean onTouchEvent(final MotionEvent event) {
final int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
buttonPaint.setColorFilter(filter2);
invalidate();
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
buttonPaint.setColorFilter(filter1);
invalidate();
break;
}
return super.onTouchEvent(event);
}
}