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

来源:互联网 发布:ubuntu怎么安装apache 编辑:程序博客网 时间:2024/05/23 10:54

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

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


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

0 0