Pinterest app中的长按菜单效果:BubbleActions

jopen 8年前

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有三部分:

  1. 一个操作的名称,显示在bubble的 上面。

  2. bubble的drawable。

  3. 一个在主线程上执行的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 ...


项目地址: https://github.com/SamThompson/BubbleActions