Pinterest app中的长按菜单效果:BubbleActions
jopen
9年前
Pinterest app中的长按菜单效果。
使用说明:
Gradle
compile 'me.samthompson:bubble-actions:1.1.0'
例子
创建 BubbleActions
BubbleActions是使用一个流式接口fluent interface (类似于SnackBar)来创建的,支持最多添加5个操作。你可以这样创建ubbleActions :
BubbleActions.on(myView) .addAction("Star", R.drawable.bubble_star, new BubbleAction.Callback() { @Override public void doAction() { Toast.makeText(v.getContext(), "Star pressed!", Toast.LENGTH_SHORT).show(); } }) // ... add more actions ... .show();
每个BubbleActions中的action有三部分:
-
一个操作的名称,显示在bubble的 上面。
-
bubble的drawable。
-
一个在主线程上执行的callback,当用户离开某个action的时候触发。
基本的例子
在activity中我们设置了一个长按监听者来显示BubbleActions:
findViewById(R.id.my_view).setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(final View v) { BubbleActions.on(v) .addAction("Star", R.drawable.bubble_star, new BubbleActions.Callback() { @Override public void doAction() { Toast.makeText(v.getContext(), "Star pressed!", Toast.LENGTH_SHORT).show(); } }) .addAction("Share", R.drawable.bubble_share, new BubbleActions.Callback() { @Override public void doAction() { Toast.makeText(v.getContext(), "Share pressed!", Toast.LENGTH_SHORT).show(); } }) .addAction("Hide", R.drawable.bubble_hide, new BubbleActions.Callback() { @Override public void doAction() { Toast.makeText(v.getContext(), "Hide pressed!", Toast.LENGTH_SHORT).show(); } }) .show(); } });
Kotlin 的例子
这里是和上面相同的例子,不过是Kotlin版本:
val textView = findViewById(R.id.text_view); textView.setOnLongClickListener { BubbleActions.on(textView) .addAction("Star", R.drawable.bubble_star, { Toast.makeText(textView.context, "Star pressed!", Toast.LENGTH_SHORT).show() }) .addAction("Share", R.drawable.bubble_share, { Toast.makeText(textView.context, "Share pressed!", Toast.LENGTH_SHORT).show() }) .addAction("Hide", R.drawable.bubble_hide, { Toast.makeText(textView.context, "Hide pressed!", Toast.LENGTH_SHORT).show() }) .show() true }
改变字体
要使用自定义字体?没问题!你可以在创建BubbleActions的时候用withTypeface配置bubble actions的typeface:
BubbleActions.on(myView).withTypeface(myFancyTypeface) // ... add actions ...
改变indicator
默认的indicator是半透明圆圈,在触摸事件的最后一次down touch发生的时候显示,你可以通过使用withIndicator方法来改变这个indicator:
BubbleActions.on(myView).withIndicator(R.drawable.my_fancy_indicator) // ... add actions ...