AndroidでTinderライクなUIを実現するライブラリ(by Kotlin)


を公開しました。

kidach1/AndroidTinderSwipe: Useful swipe-card libraries, just like Tinder.
https://github.com/kidach1/AndroidTinderSwipe

![AndroidTinderSwipe1.gif](https://media.giphy.com/media/3o85fYjTr2Knp1EOs0/giphy.gif "AndroidTinderSwipe1.gif")

例によって動画版
[Sample1](https://youtu.be/nE4kcKp_qnY) / [Sample2](https://youtu.be/sn41BOKIEAo)



2つほど類似ライブラリは存在していましたが、
[kikoso/Swipeable-Cards](https://github.com/kikoso/Swipeable-Cards)
[Diolor/Swipecards](https://github.com/Diolor/Swipecards)

実際に使おうとするとかゆいところに手が届かなかったため作りました。

## Download

```build.gradle
dependencies {
    compile 'com.kidach1:AndroidTinderSwipe:1.0.7'
}
```


## Usage

- xmlにCardContainerを配置

```xml
<com.kidach1.tinderswipe.view.CardContainer
    android:id="@+id/cardContainer"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"/>
```

- CardModelの初期化

```java
CardModel cardModel = new CardModel("TinderSwipe", "Description for card.", "http://example.com/example.png"); // title, desc, imgUrl
```

- Adapterの初期化とCardModelのセット

```java
SimpleCardStackAdapter cardAdapter = new SimpleCardStackAdapter(this);
cardAdapter.add(cardModel);
```

- Containerの初期化とAdapterのセット

```java
CardContainer cardContainer = (CardContainer) findViewById(R.id.cardContainer);
cardContainer.setAdapter(cardAdapter);
```

## Custom

CardModelインスタンスに以下listenerを生やすことで
・Like時にダイアログを出し
・ダイアログの選択肢に応じて任意の処理をさせる
ことができます。

```java
private void addDissmissListener(CardModel cardModel) {
    cardModel.setOnCardDismissedListener(new CardModel.OnCardDismissedListener() {
        @Override
        public void onLike(final CardContainer.OnLikeListener callback) {
            Log.i(TAG, "I like the card");
            openDialog(callback);
        }

        @Override
        public void onDislike() {
            Log.i(TAG, "I dislike the card");
        }
    });
}

private void openDialog(final CardContainer.OnLikeListener callback) {
    new MaterialDialog.Builder(MainActivity.this)
            .title(R.string.dialog_title)
            .content(R.string.dialog_content)
            .positiveText(R.string.dialog_positive_text)
            .negativeText(R.string.dialog_negative_text)
            .onPositive(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    Log.i(TAG, "I choose positive.");
                    callback.choose();
                }
            })
            .onNegative(new MaterialDialog.SingleButtonCallback() {
                @Override
                public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
                    Log.i(TAG, "I choose negative.");
                    callback.unchoose();
                }
            })
            .cancelListener(new DialogInterface.OnCancelListener() {
                @Override
                public void onCancel(DialogInterface dialog) {
                    Log.i(TAG, "cancel");
                    callback.unchoose();
                }
            })
            .show();
}
```

こんな感じ

![AndroidTinderSwipe2.gif](https://media.giphy.com/media/3o85fXkkRRoOsAkKvC/giphy.gif "AndroidTinderSwipe2.gif")


## その他

最初は既存ライブラリのforkから始めたものの、思ったよりもコードの変更/追加が多かったこと、ふと気付くとKotlinで書き直していたことから、別ライブラリとして公開しています。

最近のネイティブアプリは猫も杓子もTinder、ディレクターから「あのUIイケてるよね！（チラッ）」と言われた方も多いのではないでしょうか。

よければご利用ください。