Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for custom ViewPager.PageTransformer. #334

Merged
merged 7 commits into from
Jan 27, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 13 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,9 @@ setVariantEmoji(yourClassThatImplementsVariantEmoji)

If no instance or a null instance is set the [default implementation](./emoji/src/main/java/com/vanniktech/emoji/VariantEmojiManager.java) will be used.

### Custom enter and exit animations
## Animations

### Custom keyboard enter and exit animations

You can pass your own animation style for enter and exit transitions of the Emoji keyboard while you're building the [`EmojiPopup`](emoji/src/main/java/com/vanniktech/emoji/EmojiPopup.java):

Expand All @@ -176,6 +178,16 @@ This library currently ships with two animation styles as an example:
- R.style.emoji_slide_animation_style
- R.style.emoji_fade_animation_style

### Custom page transformers

You can pass your own Page Transformer for the Emoji keyboard View Pager while you're building the [`EmojiPopup`](emoji/src/main/java/com/vanniktech/emoji/EmojiPopup.java):

```java
setPageTransformer(new MagicTransformer());
```

If no transformer is set ViewPager will behave as its usual self. Please do note that this library currently does not ship any example Page Transformers.

# Snapshots

This library is also distributed as a SNAPSHOT if you like to check out the latest features.
Expand Down
2 changes: 2 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ dependencies {
implementation rootProject.ext.supportRecyclerView
implementation rootProject.ext.supportEmojiBundled

implementation 'com.eftimoff:android-viewpager-transformers:1.0.1@aar'
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is fine!


debugImplementation rootProject.ext.leakCanaryDebug
releaseImplementation rootProject.ext.leakCanaryRelease

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
import android.view.MenuItem;
import android.view.ViewGroup;
import android.widget.ImageView;
import com.eftimoff.viewpagertransformers.RotateUpTransformer;
import com.vanniktech.emoji.EmojiEditText;
import com.vanniktech.emoji.EmojiManager;
import com.vanniktech.emoji.EmojiPopup;
Expand Down Expand Up @@ -137,6 +138,7 @@ private void setUpEmojiPopup() {
.setOnEmojiPopupDismissListener(() -> emojiButton.setImageResource(R.drawable.emoji_ios_category_smileysandpeople))
.setOnSoftKeyboardCloseListener(() -> Log.d(TAG, "Closed soft keyboard"))
.setKeyboardAnimationStyle(R.style.emoji_slide_animation_style)
.setPageTransformer(new RotateUpTransformer())
.build(editText);
}
}
19 changes: 13 additions & 6 deletions emoji/src/main/java/com/vanniktech/emoji/EmojiPopup.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,13 +11,13 @@
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.StyleRes;
import android.support.v4.view.ViewPager;
import android.view.Gravity;
import android.view.View;
import android.view.ViewTreeObserver;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.PopupWindow;

import com.vanniktech.emoji.emoji.Emoji;
import com.vanniktech.emoji.listeners.OnEmojiBackspaceClickListener;
import com.vanniktech.emoji.listeners.OnEmojiClickListener;
Expand Down Expand Up @@ -110,7 +110,7 @@ public final class EmojiPopup {
EmojiPopup(@NonNull final View rootView, @NonNull final EditText editText,
@Nullable final RecentEmoji recent, @Nullable final VariantEmoji variant,
@ColorInt final int backgroundColor, @ColorInt final int iconColor, @ColorInt final int dividerColor,
@StyleRes final int animationStyle) {
@StyleRes final int animationStyle, @Nullable final ViewPager.PageTransformer pageTransformer) {
this.context = Utils.asActivity(rootView.getContext());
this.rootView = rootView.getRootView();
this.editText = editText;
Expand Down Expand Up @@ -143,7 +143,7 @@ public final class EmojiPopup {

variantPopup = new EmojiVariantPopup(this.rootView, clickListener);

final EmojiView emojiView = new EmojiView(context, clickListener, longClickListener, recentEmoji, variantEmoji, backgroundColor, iconColor, dividerColor);
final EmojiView emojiView = new EmojiView(context, clickListener, longClickListener, recentEmoji, variantEmoji, backgroundColor, iconColor, dividerColor, pageTransformer);
emojiView.setOnEmojiBackspaceClickListener(new OnEmojiBackspaceClickListener() {
@Override public void onEmojiBackspaceClick(final View v) {
backspace(editText);
Expand Down Expand Up @@ -236,10 +236,11 @@ private void showAtBottomPending() {

public static final class Builder {
@NonNull private final View rootView;
@StyleRes private int animationStyle;
@StyleRes private int keyboardAnimationStyle;
@ColorInt private int backgroundColor;
@ColorInt private int iconColor;
@ColorInt private int dividerColor;
@Nullable private ViewPager.PageTransformer pageTransformer;
@Nullable private OnEmojiPopupShownListener onEmojiPopupShownListener;
@Nullable private OnSoftKeyboardCloseListener onSoftKeyboardCloseListener;
@Nullable private OnSoftKeyboardOpenListener onSoftKeyboardOpenListener;
Expand Down Expand Up @@ -330,15 +331,21 @@ private Builder(final View rootView) {
}

@CheckResult public Builder setKeyboardAnimationStyle(@StyleRes final int animation) {
animationStyle = animation;
keyboardAnimationStyle = animation;
return this;
}

@CheckResult public Builder setPageTransformer(@Nullable final ViewPager.PageTransformer transformer) {
pageTransformer = transformer;
return this;
}

@CheckResult public EmojiPopup build(@NonNull final EditText editText) {
EmojiManager.getInstance().verifyInstalled();
checkNotNull(editText, "EditText can't be null");

final EmojiPopup emojiPopup = new EmojiPopup(rootView, editText, recentEmoji, variantEmoji, backgroundColor, iconColor, dividerColor, animationStyle);
final EmojiPopup emojiPopup = new EmojiPopup(rootView, editText, recentEmoji, variantEmoji, backgroundColor,
iconColor, dividerColor, keyboardAnimationStyle, pageTransformer);
emojiPopup.onSoftKeyboardCloseListener = onSoftKeyboardCloseListener;
emojiPopup.onEmojiClickListener = onEmojiClickListener;
emojiPopup.onSoftKeyboardOpenListener = onSoftKeyboardOpenListener;
Expand Down
14 changes: 10 additions & 4 deletions emoji/src/main/java/com/vanniktech/emoji/EmojiView.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,12 @@

private int emojiTabLastSelectedIndex = -1;

@SuppressWarnings("PMD.CyclomaticComplexity") public EmojiView(final Context context, final OnEmojiClickListener onEmojiClickListener,
final OnEmojiLongClickListener onEmojiLongClickListener, @NonNull final RecentEmoji recentEmoji,
@NonNull final VariantEmoji variantManager, @ColorInt final int backgroundColor,
@ColorInt final int iconColor, @ColorInt final int dividerColor) {
@SuppressWarnings("PMD.CyclomaticComplexity") public EmojiView(final Context context,
final OnEmojiClickListener onEmojiClickListener,
final OnEmojiLongClickListener onEmojiLongClickListener, @NonNull final RecentEmoji recentEmoji,
@NonNull final VariantEmoji variantManager, @ColorInt final int backgroundColor,
@ColorInt final int iconColor, @ColorInt final int dividerColor,
@Nullable final ViewPager.PageTransformer pageTransformer) {
super(context);

View.inflate(context, R.layout.emoji_view, this);
Expand All @@ -58,6 +60,10 @@
final View emojiDivider = findViewById(R.id.emojiViewDivider);
emojiDivider.setBackgroundColor(dividerColor != 0 ? dividerColor : Utils.resolveColor(context, R.attr.emojiDivider, R.color.emoji_divider));

if (pageTransformer != null) {
emojisPager.setPageTransformer(true, pageTransformer);
}

final LinearLayout emojisTab = findViewById(R.id.emojiViewTab);
emojisPager.addOnPageChangeListener(this);

Expand Down