diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml
new file mode 100644
index 0000000..1c24f9a
--- /dev/null
+++ b/.idea/kotlinc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index ff4618c..9503cdd 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -37,7 +37,7 @@
-
+
diff --git a/.idea/modules.xml b/.idea/modules.xml
index 45fa57a..078c317 100644
--- a/.idea/modules.xml
+++ b/.idea/modules.xml
@@ -2,9 +2,9 @@
-
-
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 680eed0..0e36ab6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -36,6 +36,6 @@ dependencies {
compile 'com.android.support:appcompat-v7:25.3.1'
compile 'com.android.support:design:25.3.1'
testCompile 'junit:junit:4.12'
-// compile project(':swipe-button')
- compile 'com.ebanx:swipe-button:0.4.2'
+ compile project(':swipe-button')
+// compile 'com.ebanx:swipe-button:0.4.2'
}
diff --git a/app/src/main/java/com/ebanx/swipebutton/MainActivity.java b/app/src/main/java/com/ebanx/swipebutton/MainActivity.java
index d15be54..cb5ae63 100644
--- a/app/src/main/java/com/ebanx/swipebutton/MainActivity.java
+++ b/app/src/main/java/com/ebanx/swipebutton/MainActivity.java
@@ -1,6 +1,7 @@
package com.ebanx.swipebutton;
import android.os.Bundle;
+import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.Menu;
import android.widget.Toast;
@@ -16,6 +17,13 @@ protected void onCreate(Bundle savedInstanceState) {
setContentView(R.layout.activity_main);
SwipeButton swipeButton = (SwipeButton) findViewById(R.id.swipe_btn);
+
+ swipeButton.setBackground(ContextCompat.getDrawable(this, R.drawable.shape_button2));
+ swipeButton.setSlidingButtonBackground(ContextCompat.getDrawable(this, R.drawable.shape_rounded2));
+ swipeButton.setDisabledDrawable(ContextCompat.getDrawable(this, R.drawable.ic_lock_outline_black_24dp));
+ swipeButton.setText("lala");
+ swipeButton.setInnerTextPadding(10, 10, 10, 10);
+
// swipeButton.setOnStateChangeListener(new OnStateChangeListener() {
// @Override
// public void onStateChange(boolean active) {
diff --git a/app/src/main/res/drawable/shape_button2.xml b/app/src/main/res/drawable/shape_button2.xml
new file mode 100644
index 0000000..63acf57
--- /dev/null
+++ b/app/src/main/res/drawable/shape_button2.xml
@@ -0,0 +1,9 @@
+
+
+-
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
index d07cb93..34b1442 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -29,6 +29,7 @@
app:button_top_padding="20dp"
app:button_bottom_padding="20dp"
app:button_background="@drawable/shape_button"
+ app:initial_state="enabled"
/>
diff --git a/swipe-button/src/main/java/com/ebanx/swipebtn/SwipeButton.java b/swipe-button/src/main/java/com/ebanx/swipebtn/SwipeButton.java
index dfd6d22..70b734e 100644
--- a/swipe-button/src/main/java/com/ebanx/swipebtn/SwipeButton.java
+++ b/swipe-button/src/main/java/com/ebanx/swipebtn/SwipeButton.java
@@ -28,17 +28,21 @@
public class SwipeButton extends RelativeLayout {
- private ImageView slidingButton;
+ private ImageView swipeButton;
private float initialX;
private boolean active;
private int initialButtonWidth;
private TextView centerText;
+ private ViewGroup background;
private Drawable disabledDrawable;
private Drawable enabledDrawable;
private OnStateChangeListener onStateChangeListener;
+ private static final int ENABLED = 0;
+ private static final int DISABLED = 1;
+
public SwipeButton(Context context) {
super(context);
@@ -68,12 +72,48 @@ public boolean isActive() {
return active;
}
+ public void setText(String text) {
+ centerText.setText(text);
+ }
+
+ public void setBackground(Drawable drawable) {
+ background.setBackground(drawable);
+ }
+
+ public void setSlidingButtonBackground(Drawable drawable) {
+ background.setBackground(drawable);
+ }
+
+ public void setDisabledDrawable(Drawable drawable) {
+ disabledDrawable = drawable;
+
+ if (!active) {
+ swipeButton.setImageDrawable(drawable);
+ }
+ }
+
+ public void setEnabledDrawable(Drawable drawable) {
+ enabledDrawable = drawable;
+
+ if (active) {
+ swipeButton.setImageDrawable(drawable);
+ }
+ }
+
public void setOnStateChangeListener(OnStateChangeListener onStateChangeListener) {
this.onStateChangeListener = onStateChangeListener;
}
+ public void setInnerTextPadding(int left, int top, int right, int bottom) {
+ centerText.setPadding(left, top, right, bottom);
+ }
+
+ public void setSwipeButtonPadding(int left, int top, int right, int bottom) {
+ swipeButton.setPadding(left, top, right, bottom);
+ }
+
private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
- RelativeLayout background = new RelativeLayout(context);
+ background = new RelativeLayout(context);
LayoutParams layoutParamsView = new LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
@@ -91,23 +131,12 @@ private void init(Context context, AttributeSet attrs, int defStyleAttr, int def
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
-
layoutParams.addRule(RelativeLayout.CENTER_IN_PARENT, RelativeLayout.TRUE);
background.addView(centerText, layoutParams);
final ImageView swipeButton = new ImageView(context);
-
- this.slidingButton = swipeButton;
-
- LayoutParams layoutParamsButton = new LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
-
- layoutParamsButton.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
- layoutParamsButton.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
-
- addView(swipeButton, layoutParamsButton);
+ this.swipeButton = swipeButton;
if (attrs != null && defStyleAttr == -1 && defStyleRes == -1) {
TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.SwipeButton,
@@ -145,6 +174,32 @@ private void init(Context context, AttributeSet attrs, int defStyleAttr, int def
float innerTextBottomPadding = typedArray.getDimension(
R.styleable.SwipeButton_inner_text_bottom_padding, 0);
+ int initialState = typedArray.getInt(R.styleable.SwipeButton_initial_state, DISABLED);
+
+ if (initialState == ENABLED) {
+ LayoutParams layoutParamsButton = new LayoutParams(
+ ViewGroup.LayoutParams.MATCH_PARENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+
+ layoutParamsButton.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
+ layoutParamsButton.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
+
+ addView(swipeButton, layoutParamsButton);
+
+ active = true;
+ } else {
+ LayoutParams layoutParamsButton = new LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT);
+
+ layoutParamsButton.addRule(RelativeLayout.ALIGN_PARENT_LEFT, RelativeLayout.TRUE);
+ layoutParamsButton.addRule(RelativeLayout.CENTER_VERTICAL, RelativeLayout.TRUE);
+
+ addView(swipeButton, layoutParamsButton);
+
+ active = false;
+ }
+
centerText.setPadding((int) innerTextLeftPadding,
(int) innerTextTopPadding,
(int) innerTextRightPadding,
@@ -190,23 +245,23 @@ public boolean onTouch(View v, MotionEvent event) {
return true;
case MotionEvent.ACTION_MOVE:
if (initialX == 0) {
- initialX = slidingButton.getX();
+ initialX = swipeButton.getX();
}
- if (event.getX() > initialX + slidingButton.getWidth() / 2 &&
- event.getX() + slidingButton.getWidth() / 2 < getWidth()) {
- slidingButton.setX(event.getX() - slidingButton.getWidth() / 2);
- centerText.setAlpha(1 - 1.3f * (slidingButton.getX() + slidingButton.getWidth()) / getWidth());
+ if (event.getX() > initialX + swipeButton.getWidth() / 2 &&
+ event.getX() + swipeButton.getWidth() / 2 < getWidth()) {
+ swipeButton.setX(event.getX() - swipeButton.getWidth() / 2);
+ centerText.setAlpha(1 - 1.3f * (swipeButton.getX() + swipeButton.getWidth()) / getWidth());
}
- if (event.getX() + slidingButton.getWidth() / 2 > getWidth() &&
- slidingButton.getX() + slidingButton.getWidth() / 2 < getWidth()) {
- slidingButton.setX(getWidth() - slidingButton.getWidth());
+ if (event.getX() + swipeButton.getWidth() / 2 > getWidth() &&
+ swipeButton.getX() + swipeButton.getWidth() / 2 < getWidth()) {
+ swipeButton.setX(getWidth() - swipeButton.getWidth());
}
- if (event.getX() < slidingButton.getWidth() / 2 &&
- slidingButton.getX() > 0) {
- slidingButton.setX(0);
+ if (event.getX() < swipeButton.getWidth() / 2 &&
+ swipeButton.getX() > 0) {
+ swipeButton.setX(0);
}
return true;
@@ -214,9 +269,8 @@ public boolean onTouch(View v, MotionEvent event) {
if (active) {
collapseButton();
} else {
- initialButtonWidth = slidingButton.getWidth();
-
- if (slidingButton.getX() + slidingButton.getWidth() > getWidth() * 0.85) {
+ if (swipeButton.getX() + swipeButton.getWidth() > getWidth() * 0.85) {
+ initialButtonWidth = swipeButton.getWidth();
expandButton();
} else {
moveButtonBack();
@@ -233,26 +287,26 @@ public boolean onTouch(View v, MotionEvent event) {
private void expandButton() {
final ValueAnimator positionAnimator =
- ValueAnimator.ofFloat(slidingButton.getX(), 0);
+ ValueAnimator.ofFloat(swipeButton.getX(), 0);
positionAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float x = (Float) positionAnimator.getAnimatedValue();
- slidingButton.setX(x);
+ swipeButton.setX(x);
}
});
final ValueAnimator widthAnimator = ValueAnimator.ofInt(
- slidingButton.getWidth(),
+ swipeButton.getWidth(),
getWidth());
widthAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
- ViewGroup.LayoutParams params = slidingButton.getLayoutParams();
+ ViewGroup.LayoutParams params = swipeButton.getLayoutParams();
params.width = (Integer) widthAnimator.getAnimatedValue();
- slidingButton.setLayoutParams(params);
+ swipeButton.setLayoutParams(params);
}
});
@@ -264,7 +318,7 @@ public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
active = true;
- slidingButton.setImageDrawable(enabledDrawable);
+ swipeButton.setImageDrawable(enabledDrawable);
if (onStateChangeListener != null) {
onStateChangeListener.onStateChange(active);
@@ -278,13 +332,13 @@ public void onAnimationEnd(Animator animation) {
private void moveButtonBack() {
final ValueAnimator positionAnimator =
- ValueAnimator.ofFloat(slidingButton.getX(), 0);
+ ValueAnimator.ofFloat(swipeButton.getX(), 0);
positionAnimator.setInterpolator(new AccelerateDecelerateInterpolator());
positionAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
float x = (Float) positionAnimator.getAnimatedValue();
- slidingButton.setX(x);
+ swipeButton.setX(x);
}
});
@@ -300,15 +354,15 @@ public void onAnimationUpdate(ValueAnimator animation) {
private void collapseButton() {
final ValueAnimator widthAnimator = ValueAnimator.ofInt(
- slidingButton.getWidth(),
+ swipeButton.getWidth(),
initialButtonWidth);
widthAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
- ViewGroup.LayoutParams params = slidingButton.getLayoutParams();
+ ViewGroup.LayoutParams params = swipeButton.getLayoutParams();
params.width = (Integer) widthAnimator.getAnimatedValue();
- slidingButton.setLayoutParams(params);
+ swipeButton.setLayoutParams(params);
}
});
@@ -317,7 +371,7 @@ public void onAnimationUpdate(ValueAnimator animation) {
public void onAnimationEnd(Animator animation) {
super.onAnimationEnd(animation);
active = false;
- slidingButton.setImageDrawable(disabledDrawable);
+ swipeButton.setImageDrawable(disabledDrawable);
if (onStateChangeListener != null) {
onStateChangeListener.onStateChange(active);
diff --git a/swipe-button/src/main/res/values/attrs.xml b/swipe-button/src/main/res/values/attrs.xml
index 7cf2690..d34c16c 100644
--- a/swipe-button/src/main/res/values/attrs.xml
+++ b/swipe-button/src/main/res/values/attrs.xml
@@ -16,6 +16,10 @@
+
+
+
+