ProSwipeButton

A swipe button for Android with a circular progress bar for async operations.

proSwipeButton_demo

Gradle

dependencies {
    ...
    compile 'in.shadowfax:proswipebutton:1.1'
}

Usage

  1. In your XML layout file, add this custom view
<in.shadowfax.proswipebutton.ProSwipeButton
        android:id="@+id/awesome_btn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        app:bg_color="@android:color/holo_blue_dark"
        app:btn_text="Place Order" />
  1. React to successful swipe on the button by adding a swipe listener
ProSwipeButton proSwipeBtn = (ProSwipeButton) findViewById(R.id.awesome_btn);
proSwipeBtn.setOnSwipeListener(new ProSwipeButton.OnSwipeListener() {
            @Override
            public void onSwipeConfirm() {
                // user has swiped the btn. Perform your async operation now
                new Handler().postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        // task success! show TICK icon in ProSwipeButton
                        proSwipeBtn.showResultIcon(true); // false if task failed
                    }
                }, 2000);
            }
        });
  1. After the async task is completed, tell the ProSwipeButton to show a result icon.
    Either a tick for a successful async operation or cross for a failed async operation.
proSwipeBtn.showResultIcon(true); //if task succeeds
proSwipeBtn.showResultIcon(false); //if task fails

Customizations

You can customize the button via XML or programatically.

<in.shadowfax.proswipebutton.ProSwipeButton
        android:id="@+id/proswipebutton_main_error"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        app:arrow_color="#33FFFFFF"
        app:bg_color="@android:color/holo_blue_dark"
        app:btn_radius="2dp"
        app:btn_text="Place Order"
        app:text_color="@android:color/white"
        app:text_size="12sp" />

New: set distance the user must swipe to activate the button.

proswipebutton.setSwipeDistance(0.6f);

Feel free to raise feature requests via the issue tracker for more customizations or just send in a PR :)

Sample

Clone the repository and check out the app module.

GitHub