自定義控制項之優酷選單

2021-07-22 21:22:51 字數 2457 閱讀 2312

旋轉中心是三個半圓所公共的圓心!!

在這樣乙個relativelayout布局中 有三層選單,由最小的方形到最大的方形,三個相對布局組成;其中的各個選單按鈕都是通過相對布局搭配到對應半圓圖層的~;

建立乙個animationutil 類,作為自定義控制項的動畫方法類,在主活動中進行對應呼叫;

public class animutil

//pivotxtype, 現對於自身,相對於

//pivotxvalue, pivotyvalue 相對於寬度和高度的0.幾?

//rotateanimation animation1  = new rotateanimation(fromdegrees, todegrees, pivotxtype, pivotxvalue, pivotytype, pivotyvalue)

rotateanimation animation = new rotateanimation(0, -180, 

rotateanimation.relative_to_self, 0.5f, rotateanimation.relative_to_self, 1);

animation.setduration(1000);//這就是 旋轉中心

animation.setfillafter(true);

animation.setstartoffset(startoffset);

animation.setanimationlistener(new myanimationlistener());

rl.startanimation(animation);

}public static void showmenu(relativelayout rl,int startoffset)//開啟選單方法

rotateanimation animation = new rotateanimation(-180, -0, 

rotateanimation.relative_to_self, 0.5f, rotateanimation.relative_to_self, 1);

animation.setduration(1000);

animation.setfillafter(true);

animation.setstartoffset(startoffset);

animation.setanimationlistener(new myanimationlistener());

rl.startanimation(animation);

}static class myanimationlistener implements animationlistener

@override

public void onanimationend(animation animation)

@override

public void onanimationrepeat(animation animation)  }}

mainactivity中的具體**:

public class mainactivity extends activity implements onclicklistener

@override

public boolean onkeydown(int keycode, keyevent event) if (isshowlevel2)

animutil.closemenu(level1, startoffset);

}else

isshowmenu=!isshowmenu;

return true;

}return super.onkeydown(keycode, event);

}private void initlistener()

private void initviews()

@override

public boolean oncreateoptionsmenu(menu menu)

@override

public void onclick(view v)

if (isshowlevel2)

log.e(tag, "執行隱藏操作");

animutil.closemenu(level2,startoffset);

}else

isshowlevel2 = !isshowlevel2;

break;

case r.id.iv_menu:

if (animutil.animcount!=0)

if (isshowlevel3) else

break;

default:

break;}}

}

自定義控制項 條狀 塊狀選單

好久來這裡了,分享乙個demo原始碼。使用場景 效果圖 相信很多移動端開發者都很熟悉了,通常我們首先想到的就是使用 relativelayout 方式處理,例如 我們寫乙個還好,當你重複寫三個以上這樣的控制項時你可能一直在重複複製貼上的動作,而且你的布局層次會變得複雜而冗長。相信有追求的猿猿都會想到...

自定義控制項 條狀 塊狀選單

好久來這裡了,分享乙個demo原始碼。使用場景 效果圖 相信很多移動端開發者都很熟悉了,通常我們首先想到的就是使用 relativelayout 方式處理,例如 我們寫乙個還好,當你重複寫三個以上這樣的控制項時你可能一直在重複複製貼上的動作,而且你的布局層次會變得複雜而冗長。相信有追求的猿猿都會想到...

Android自定義控制項之自定義組合控制項(三)

前兩篇介紹了自定義控制項的基礎原理android自定義控制項之基本原理 一 自定義屬性android自定義控制項之自定義屬性 二 今天重點介紹一下如何通過自定義組合控制項來提高布局的復用,降低開發成本,以及維護成本。1.第一種方式 直接在每個xml布局中寫相同的標題欄布局 這種方式沒有任何布局復用的...