多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > php開源 > 綜合技術 > android環(huán)形彈出菜單的實現(xiàn)

android環(huán)形彈出菜單的實現(xiàn)

來源:程序員人生   發(fā)布時間:2016-02-28 09:56:11 閱讀次數(shù):3565次

前言:

最近在eoe上看到了1個環(huán)形菜單的效果,其實之前在github上早就見過了,看到實現(xiàn)代碼也是挺多的,依照自己的思路做了1下效果,實現(xiàn)還是比較簡單的。這個項目離組件還是有1定的上升空間的,只要是教會大家如何去做1個類似的效果。


奉上效果圖:

看到這里大家有無1種很熟習的感覺,對,99.99999999%你看過。空話不多說,開始今天的教程。

項目結構圖:

對,你沒有看錯,就只有這兩個文件需要修改,其他都是默許生成的文件。

我們先來看看activity_main.xml中的布局:


這邊有8個ImageView,位置是堆疊起來的(只要把主菜單,也就是那個紅色的按鈕的圖片置于頂部就好了),這邊我需要sorry的1點就是,圖片的位置可能有點需要微調,處女座的自行略過。每一個ImageView都定義了1個id和1個onClick事件。基本都是我們之前都熟習的東西,沒有甚么需要特別介紹的。


主要代碼來了,前方高能。

MainActivity.java的主要代碼:

package com.beyole.objectanimatortest; import java.util.ArrayList; import java.util.List; import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.animation.BounceInterpolator; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { //圖片資源 private int[] res = { R.id.id_a, R.id.id_b, R.id.id_c, R.id.id_d, R.id.id_e, R.id.id_f, R.id.id_g, R.id.id_h }; //寄存ImageView private ListimageViewList = new ArrayList(); //菜單是否是展開 private boolean isNotExpand = true; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //利用循環(huán),初始化ImageView組件 for (int i = 0; i < res.length; i++) { ImageView imageView = (ImageView) findViewById(res[i]); //寄存在list中 imageViewList.add(imageView); } } //點擊事件 public void clickview(View view) { switch (view.getId()) { //主菜單被點擊 case R.id.id_a: //主菜單沒有展開時被點擊 if (isNotExpand == true) { //啟動動畫 startAnim(); } else { //關閉動畫 closeAnim(); } break; //定義其他組件被點擊時觸發(fā)的事件 default: Toast.makeText(MainActivity.this, "您點擊了:" + view.getId(), Toast.LENGTH_LONG).show(); break; } } //關閉動畫 private void closeAnim() { for (int i = 1; i < res.length; i++) { float angle = (90 * 1.0f / (res.length - 2)) * (i - 1); PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("translationX", (float) (Math.sin((angle * 1.57 / 90)) * 200), 0); PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("translationY", (float) (Math.cos((angle * 1.57 / 90)) * 200), 0); ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(imageViewList.get(i), holder1, holder2); // ObjectAnimator animator = // ObjectAnimator.ofFloat(imageViewList.get(i), "translationY", i * 60, // 0); animator.setDuration(300); animator.start(); isNotExpand = true; } } //開始動畫 private void startAnim() { //遍歷第1個不是主菜單的ImageView列表 for (int i = 1; i < res.length; i++) { //獲得展開角度 float angle = (90 * 1.0f / (res.length - 2)) * (i - 1); //獲得X位移 PropertyValuesHolder holder1 = PropertyValuesHolder.ofFloat("translationX", 0, (float) (Math.sin((angle * 1.57 / 90)) * 200)); //獲得Y位移 PropertyValuesHolder holder2 = PropertyValuesHolder.ofFloat("translationY", 0, (float) (Math.cos((angle * 1.57 / 90)) * 200)); //設置ImageView的屬性動畫 ObjectAnimator animator = ObjectAnimator.ofPropertyValuesHolder(imageViewList.get(i), holder1, holder2); // ObjectAnimator animator = // ObjectAnimator.ofFloat(imageViewList.get(i), "translationY", 0, i * // 60); //動畫時間 animator.setDuration(1000); //動畫延遲時間 animator.setFrameDelay(500 * i); //設置加速器 animator.setInterpolator(new BounceInterpolator()); //啟動動畫 animator.start(); isNotExpand = false; } } }

本篇的效果主要是依托ObjectAnimator屬性動畫來實現(xiàn)的,如果對ObjectAnimator不了解的話,百度1下,有很多關于這個方面的資料,本文就不再贅述了。其實這邊需要有1個小的數(shù)學技能,就是獲得ImageView的角度問題,我這邊是通過ImageView的個數(shù)出去除去主菜單的1個Imageview,將90度分為res.length⑵份,再乘以下標減去1,就是我們需要平移的角度。那末X的位移就是sina*R,y的唯1就是cosa*R,(這邊的1.57是2分之圓周率)。行了,到這里就算是結束了。關閉效果就是把開啟動畫的進程逆過來就是了,這里不詳細介紹。



可能有講的不好的地方,或有需要改進的代碼,歡迎大家提出寶貴意見,我會好好改進的。


csdn下載地址:http://download.csdn.net/detail/xuejiawei123/9197525

github地址:https://github.com/xuejiawei/beyole_android_ObjectAnimatorToolBars

版權聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉載。

生活不易,碼農辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 男人天堂亚洲 | 久久综合久久久 | 欧美日韩国产手机在线观看视频 | 男人把大ji巴放进男人免费视频 | 日韩欧美h | 亚洲精品老司机综合影院 | 亚洲一区二区观看 | 手机在线看片福利盒子 | 国产成人乱码一区二区三区在线 | 国产精品99一区二区三区 | 成人精品视频在线观看 | 波多野结衣久久精品免费播放 | 国产精品久久久久毛片真精品 | 亚洲1区2区3区4区 | 最猛黑人xxxⅹ黑人猛交 | 日本一区二区三区欧美在线观看 | 韩国三级在线观看我不卡 | 国产精品a v 免费视频 | 亚洲精品精品一区 | 午夜视频在线免费 | 亚洲欧美综合国产精品一区 | 成人在线观看视频免费 | 亚洲国产成人久久综合一 | 亚洲国产欧美久久香综合 | 中文字幕亚洲无线码a | 国产片一级毛片视频 | 国产午夜a理论毛片在线影院 | 中日韩欧美在线观看 | 最近中文字幕在线 | 国产aaa级一级毛片 国产aaa免费视频国产 | 2020久久国产最新免费观看 | 色成人亚洲 | 国产在线观看成人免费视频 | free3dvideos性欧洲 | 欧美一级在线观看播放 | 欧美18 - 19sex性| 色吊丝在线观看国产 | 亚洲一区二区三区高清 不卡 | 国产精品入口麻豆免费 | 亚洲成aⅴ人在线观看 | 波多野结衣手机视频一区 |