原Github地址:https://github.com/hoang8f/android-flat-button
使用方法:
1.加入gradle依赖:
compile 'info.hoang8f:fbutton:1.0.5'
2.加入FButton的java文件:
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.graphics.drawable.ShapeDrawable;
import android.graphics.drawable.shapes.RoundRectShape;
import android.os.Build;
import android.support.v7.widget.AppCompatButton;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import info.hoang8f.fbutton.R;
/**
* Created by hoang8f on 5/5/14.
*/
public class FButton extends AppCompatButton implements View.OnTouchListener {
//Custom values
private boolean isShadowEnabled = true;
private int mButtonColor;
private int mShadowColor;
private int mShadowHeight;
private int mCornerRadius;
//Native values
private int mPaddingLeft;
private int mPaddingRight;
private int mPaddingTop;
private int mPaddingBottom;
//Background drawable
private Drawable pressedDrawable;
private Drawable unpressedDrawable;
boolean isShadowColorDefined = false;
public FButton(Context context) {
super(context);
init();
this.setOnTouchListener(this);
}
public FButton(Context context, AttributeSet attrs) {
super(context, attrs);
init();
parseAttrs(context, attrs);
this.setOnTouchListener(this);
}
public FButton(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
parseAttrs(context, attrs);
this.setOnTouchListener(this);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
//Update background color
refresh();
}
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
switch (motionEvent.getAction()) {
case MotionEvent.ACTION_DOWN:
updateBackground(pressedDrawable);
this.setPadding(mPaddingLeft, mPaddingTop + mShadowHeight, mPaddingRight, mPaddingBottom);
break;
case MotionEvent.ACTION_MOVE:
Rect r = new Rect();
view.getLocalVisibleRect(r);
if (!r.contains((int) motionEvent.getX(), (int) motionEvent.getY() + 3 * mShadowHeight) &&
!r.contains((int) motionEvent.getX(), (int) motionEvent.getY() - 3 * mShadowHeight)) {
updateBackground(unp