Android自定義懸浮按鈕效果實現,帶移動效果

jopen 9年前發布 | 9K 次閱讀 Java 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;
}

} </pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!