| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
jopen
10年前发布

Android自定义悬浮按钮效果实现,带移动效果

一个带动画效果的悬浮按钮。从下往上显示,从上往下消失。

代码比较简单,实现原理也比较简单。

  public class MainActivity extends Activity {      private Button btn_hide,btn_show;      private Floatingbutton floatingButton ;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          setContentView(R.layout.activity_main);           btn_hide=(Button)findViewById(R.id.btn_hide);              btn_show=(Button)findViewById(R.id.btn_show);               floatingButton = (Floatingbutton) findViewById(R.id.button_floating_action);              btn_hide.setOnClickListener(new OnClickListener() {                                    @Override                  public void onClick(View v) {                      // TODO Auto-generated method stub                       floatingButton.hide();                  }              });                            btn_show.setOnClickListener(new OnClickListener() {                                    @Override                  public void onClick(View v) {                      // TODO Auto-generated method stub                       floatingButton.show();                  }              });      }  }     public class Floatingbutton extends ImageButton {      private Boolean isShow = false;       private static final int TRANSLATE_DURATION_MILLIS = 200;      private final Interpolator mInterpolator = new AccelerateDecelerateInterpolator();      public Floatingbutton(Context context) {          super(context);      }      public Floatingbutton(Context context, AttributeSet attrs) {          super(context, attrs);          init(context, attrs);      }      public Floatingbutton(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);          init(context, attrs);      }      public void init(Context context, AttributeSet attrs) {          show();      }      public void show() {          if (!isShow) {              isShow = true;              toggle();          }                }      public void hide() {          if (isShow) {              isShow = false;              toggle();          }                }      private void toggle() {            int height = getHeight();            int translationY = isShow ? 0 : height + getMarginBottom();            animate().setInterpolator(mInterpolator)            .setDuration(TRANSLATE_DURATION_MILLIS)            .translationY(translationY);      }      private int getMarginBottom() {          int marginBottom = 0;          final ViewGroup.LayoutParams layoutParams = getLayoutParams();          if (layoutParams instanceof ViewGroup.MarginLayoutParams) {              marginBottom = ((ViewGroup.MarginLayoutParams) layoutParams).bottomMargin;          }          return marginBottom;      }  }