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

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用

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

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

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;
    }
}

标签: 代码

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:jquery 失去焦点时输入框为空时自动填写默认内容

下一篇:Android实现烟花效果