Android開發中利用ObjectAnimator實現ArcMenu
本文介紹利用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 ListimageViewList = 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; ListobjectAnimators = new ArrayList(); AnimatorSet set = new AnimatorSet(); for (int i = 1; i 同理,關閉選單
private void closeMenu() { isShowMenu = false; ObjectAnimator animator1 = null; ObjectAnimator animator2; ListobjectAnimators = 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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Android開發中陰影效果的實現Android
- Android原始碼解析(二)動畫篇-- ObjectAnimatorAndroid原始碼動畫Object
- Android屬性動畫完全解析(中),ValueAnimator和ObjectAnimator的高階用法Android動畫Object
- android開發中單擊事件的多種實現方法Android事件
- 現有Android專案中整合Flutter/Flutter混合開發實戰(一)AndroidFlutter
- Android開發利用NanoHttpd搭建伺服器AndroidNaNhttpd伺服器
- Android開發之高德地圖實現定位Android地圖
- Android開發之DrawerLayout實現抽屜效果Android
- 創業中如何實現敏捷開發創業敏捷
- Android開發中API層的最佳實踐AndroidAPI
- 利用 Android 系統原生 API 實現分享功能AndroidAPI
- Android利用Drawable Animation實現圖片動畫播放Android動畫
- Android之利用Handler實現ProgressBar進度條Android
- [譯] 如何在 Android 開發中充分利用多攝像頭 APIAndroidAPI
- Android開發之SwipeRefreshLayout實現下拉重新整理Android
- android開發實現記憶體優化功能Android記憶體優化
- Android開發之TabLayout實現頂部選單AndroidTabLayout
- 利用自定義流程表單開發的優勢,實現流程化發展!
- 理想和現實中的產品開發
- asp.net開發中利用jquery來實現滾動下拉標題浮動固定顯示ASP.NETjQuery
- Android小知識-利用OkHttp實現WebSocket通訊AndroidHTTPWeb
- 利用 Android 系統原生 API 實現分享功能(2)AndroidAPI
- 利用AspectJ實現Android端非侵入式埋點Android
- Android開發 - (介面卡)Adapter類中BaseAdapter實現類詳細解析AndroidAPT
- Android開發 - (介面卡)Adapter類中SimpleAdapter實現類詳細解析AndroidAPT
- Android UI 開發之實現底部切換標籤AndroidUI
- 在 Java 中利用 redis 實現 LBS 服務JavaRedis
- Android實際開發中實用的第三方(開源)框架Android框架
- 在瀑布式專案中實現敏捷開發敏捷
- 利用Redis實現高併發計數器Redis
- 現有Android專案中整合Flutter/Flutter混合開發實戰(二):FlutterActivity原始碼分析AndroidFlutter原始碼
- Android 動態代理以及利用動態代理實現 ServiceHookAndroidHook
- Android 利用Iptables實現網路黑白名單(防火牆)Android防火牆
- android 利用path 實現手寫板的手寫效果Android
- Android利用感測器實現-仿微信搖一搖Android
- Android Studio中NDK開發Android
- android開發(3):列表listview的實現 | 下拉重新整理AndroidView
- Android開發之TextView文字水平滾動效果實現AndroidTextView