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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/3270.html

(0)
上一篇 2021年7月16日
下一篇 2021年7月16日

相关推荐

发表回复

登录后才能评论