Android開發中利用ObjectAnimator實現ArcMenu

at_1發表於2021-09-09

本文介紹利用ObjectAnimator簡單地實現ArcMenu,直接使用本文的ArcMenu類即可快捷地實現選單功能。

最終使用效果

先看下最終的使用效果:

private int[] imageRes = {R.id.img_menu, R.id.img_menu1, R.id.img_menu2, R.id.img_menu3, 
R.id.img_menu4, R.id.img_menu5};private ArcMenu arcMenu;
...//初始化,引數為資源圖片id
 arcMenu = new ArcMenu(this, imageRes);//點選事件,這邊使用了annotation,直接使用findViewById然後設定監聽事件也可以
    @Click
    public void img_menu() {
        mylog.d(" @Click img_menu");
        arcMenu.switchMenu();
    }    @Click
    public void img_menu1() {
        arcMenu.clickItem();
        mylog.d(" @Click img_menu1");
    }    @Click
    public void img_menu2() {
        arcMenu.clickItem();
        mylog.d(" @Click img_menu2");
    }    @Click
    public void img_menu3() {
        arcMenu.clickItem();
        mylog.d(" @Click img_menu3");
    }    @Click
    public void img_menu4() {
        arcMenu.clickItem();
        mylog.d(" @Click img_menu4");
    }    @Click
    public void img_menu5() {
        arcMenu.clickItem();
        mylog.d(" @Click img_menu5");
    }

佈局檔案中,將需要用到的圖片放在同一位置。



    

    

    

    

    

    

下面為截圖;

具體實現

初始化,透過imageRes的數量設定相鄰兩個圖示之間的角度,同時將imageView加入imageViewList中,方便後面使用

public class ArcMenu {    private Activity context;    private int[] imageRes;    private List imageViewList = new ArrayList();    private boolean isShowMenu = false;    int radius = 180;    double angle;    public ArcMenu(Activity context, int[] imageRes) {
        angle = Math.PI / 2 / (imageRes.length - 2);
        radius = Tool.dip2px(context, radius);        this.context = context;        this.imageRes = imageRes;        for (int imagRe : imageRes) {
            ImageView imageView = (ImageView) context.findViewById(imagRe);
            imageViewList.add(imageView);
        }
    }
}

選單彈出動畫,使用ObjectAnimator,對每一個圖示進行平移操作,第0個圖示為選單開關,加入旋轉動畫。

private void openMenu() {
        isShowMenu = true;
        setItemVisible(true);
        ObjectAnimator animator1;
        ObjectAnimator animator2;
        List objectAnimators = new ArrayList();
        AnimatorSet set = new AnimatorSet();        for (int i = 1; i 

同理,關閉選單

private void closeMenu() {
        isShowMenu = false;
        ObjectAnimator animator1 = null;
        ObjectAnimator animator2;
        List objectAnimators = new ArrayList();
        AnimatorSet set = new AnimatorSet();        for (int i = 1; i 

切換選單開關

public void switchMenu() {        if (isShowMenu) {
            closeMenu();
        } else {
            openMenu();
        }
    }

圖示被點選後,將所有子圖示隱藏,同時呼叫closMenu(),將圖片移回原處。

public void clickItem() {
        setItemVisible(false);
        closeMenu();
    }    private void setItemVisible(boolean isVisible) {        for (int i = 1; i 

總結

至此,整個功能大致完成。現有的功能預設arcmenu為介面右下角,其他位置相應地修改公式即可以實現,可自行進行擴充,相容不同位置。

本文連結:
本文作者: – 蘇耀東

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1817/viewspace-2810175/,如需轉載,請註明出處,否則將追究法律責任。

相關文章