亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android編程實現仿優酷旋轉菜單效果(附demo源碼)

2020-04-11 11:11:49
字體:
來源:轉載
供稿:網友

本文實例講述了Android編程實現仿優酷旋轉菜單效果。分享給大家供大家參考,具體如下:

首先,看下效果:

不好意思,不會制作動態圖片,只好上傳靜態的了,如果誰會,請教教我吧。

首先,看下xml文件:

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"   android:layout_width="fill_parent"   android:layout_height="fill_parent"   android:background="#c9c9c9" >   <RelativeLayout     android:id="@+id/relate_level3"     android:layout_width="280dp"     android:layout_height="140dp"     android:layout_alignParentBottom="true"     android:layout_centerHorizontal="true"     android:background="@drawable/level3" >     <ImageButton      android:id="@+id/c1"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:layout_marginBottom="6dip"      android:layout_marginLeft="12dip"      android:background="@drawable/channel1" />     <ImageButton      android:id="@+id/c2"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_above="@+id/c1"      android:layout_marginBottom="12dip"      android:layout_marginLeft="28dip"      android:background="@drawable/channel2" />     <ImageButton      android:id="@+id/c3"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_above="@+id/c2"      android:layout_marginBottom="8dip"      android:layout_marginLeft="6dip"      android:layout_toRightOf="@+id/c2"      android:background="@drawable/channel3" />     <ImageButton      android:id="@+id/c4"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_centerHorizontal="true"      android:layout_margin="6dip"      android:background="@drawable/channel4" />     <ImageButton      android:id="@+id/c5"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_above="@+id/c6"      android:layout_marginBottom="8dip"      android:layout_marginRight="6dip"      android:layout_toLeftOf="@+id/c6"      android:background="@drawable/channel5" />     <ImageButton      android:id="@+id/c6"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_above="@+id/c7"      android:layout_alignParentRight="true"      android:layout_marginBottom="12dip"      android:layout_marginRight="28dip"      android:background="@drawable/channel6" />     <ImageButton      android:id="@+id/c7"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:layout_alignParentRight="true"      android:layout_marginBottom="6dip"      android:layout_marginRight="12dip"      android:background="@drawable/channel7" />   </RelativeLayout>   <RelativeLayout     android:id="@+id/relate_level2"     android:layout_width="180dp"     android:layout_height="90dp"     android:layout_alignParentBottom="true"     android:layout_centerHorizontal="true"     android:background="@drawable/level2" >     <ImageButton      android:id="@+id/menu"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_centerHorizontal="true"      android:layout_margin="6dip"      android:background="@drawable/icon_menu" />     <ImageButton      android:id="@+id/search"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:layout_margin="10dip"      android:background="@drawable/icon_search" />     <ImageButton      android:id="@+id/myyouku"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:layout_alignParentRight="true"      android:layout_margin="10dip"      android:background="@drawable/icon_myyouku" />   </RelativeLayout>   <RelativeLayout     android:id="@+id/relate_level1"     android:layout_width="100dp"     android:layout_height="50dp"     android:layout_alignParentBottom="true"     android:layout_centerHorizontal="true"     android:background="@drawable/level1" >     <ImageButton      android:id="@+id/home"      android:layout_width="wrap_content"      android:layout_height="wrap_content"      android:layout_alignParentBottom="true"      android:layout_centerHorizontal="true"      android:layout_marginBottom="10dp"      android:background="@drawable/icon_home" />   </RelativeLayout> </RelativeLayout>

大家看到主要有三個RalativeLayout,就是大家看到的三層,但是關于圖片的傾斜 是怎樣實現的呢?實際上是個假象,圖片是正放的,里面圖像是傾斜的。如下圖:

這樣大概能明白,下面就是開始動畫效果了,先看下主Activity:

public class TestYoukuActivity extends Activity {   /** Called when the activity is first created. */   private boolean areLevel2Showing = true, areLevel3Showing = true;   private RelativeLayout relate_level2, relate_level3;   private ImageButton home, menu;   @Override   public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.main);     findViews();     setListener();    }   private void findViews() {     relate_level2 = (RelativeLayout) findViewById(R.id.relate_level2);     relate_level3 = (RelativeLayout) findViewById(R.id.relate_level3);     home = (ImageButton) findViewById(R.id.home);     menu = (ImageButton) findViewById(R.id.menu);   }   private void setListener() {     // 給大按鈕設置點擊事件     home.setOnClickListener(new OnClickListener() {      @Override      public void onClick(View v) {        if (!areLevel2Showing) {         MyAnimation.startAnimationsIn(relate_level2, 500);        } else {         if (areLevel3Showing) {           MyAnimation.startAnimationsOut(relate_level2, 500, 500);           MyAnimation.startAnimationsOut(relate_level3, 500, 0);           areLevel3Showing = !areLevel3Showing;         } else {           MyAnimation.startAnimationsOut(relate_level2, 500, 0);         }        }        areLevel2Showing = !areLevel2Showing;      }     });     menu.setOnClickListener(new OnClickListener() {      @Override      public void onClick(View v) {        if (!areLevel3Showing) {         MyAnimation.startAnimationsIn(relate_level3, 500);        } else {         MyAnimation.startAnimationsOut(relate_level3, 500, 0);        }        areLevel3Showing = !areLevel3Showing;      }     });   } }

應該注意到了:

復制代碼 代碼如下:
MyAnimation.startAnimationsIn(relate_level2, 500);

看一下這個靜態方法的實現:

public static void startAnimationsIn(ViewGroup viewgroup, int durationMillis) {    viewgroup.setVisibility(0);     for (int i = 0; i < viewgroup.getChildCount(); i++) {      viewgroup.getChildAt(i).setVisibility(0);      viewgroup.getChildAt(i).setClickable(true);      viewgroup.getChildAt(i).setFocusable(true);     }     Animation animation;     animation = new RotateAnimation(-180, 0, Animation.RELATIVE_TO_SELF,        0.5f, Animation.RELATIVE_TO_SELF, 1.0f);     animation.setFillAfter(true);     animation.setDuration(durationMillis);     viewgroup.startAnimation(animation); }

RotateAnimation是畫面轉移旋轉動畫效果,看一下它的構造方法:

RotateAnimation(Context context, AttributeSet attrs)
Constructor used when a RotateAnimation is loaded from a resource.
         RotateAnimation(float fromDegrees, float toDegrees)
Constructor to use when building a RotateAnimation from code.
RotateAnimation(float fromDegrees, float toDegrees, float pivotX, float pivotY)
Constructor to use when building a RotateAnimation from code
         RotateAnimation(float fromDegrees, float toDegrees, int pivotXType, float pivotXValue, int pivotYType, float pivotYValue)
Constructor to use when building a RotateAnimation from code

在這里使用的是第四個構造方法:

fromDegrees:旋轉的開始角度。
toDegrees:旋轉的結束角度。
pivotXType:X軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotXValue:X坐標的伸縮值。
pivotYType:Y軸的伸縮模式,可以取值為ABSOLUTE、RELATIVE_TO_SELF、RELATIVE_TO_PARENT。
pivotYValue:Y坐標的伸縮值。

關于角度問題:

當角度為負數――表示逆時針旋轉 
當角度為正數――表示順時針旋轉
(負數from――to正數:順時針旋轉)
(負數from――to負數:逆時針旋轉)
(正數from――to正數:順時針旋轉)
(正數from――to負數:逆時針旋轉)

關于pivotXValue:這一點的X坐標的對象被旋轉,在指定的絕對數字0是左邊邊緣。如果pivotXType數是絕對的這個值可以是一個絕對,另外也可以是百分比(在1.0為100%)。50%是x中點,100%為右邊緣。
同理,pivotYValue:這一點的Y坐標的對象被旋轉,在指定的絕對數字0是頂部邊緣。如果pivotYType數是絕對的這個值可以是一個絕對,另外也可以是百分比(在1.0為100%)。50%是Y中點,100%為下邊緣。

然后再看下調用的其他的方法:

setFillAfter:
If fillAfter is true, the transformation that this animation performed will persist when it is finished. Defaults to false if not set. Note that this applies when using an AnimationSet to chain animations. The transformation is not applied before the AnimationSet itself starts.

如果fillAfter為真,transformation 動畫將一直運行直到它完成。默認設置為假。注意:這適用于當使用一個AnimationSet連鎖動畫。transformation 是不適用AnimationSet本身之前開始。

setDuration:設置動畫時間。

再看一下退出:

// 圖標的動畫(出動畫) public static void startAnimationsOut(final ViewGroup viewgroup,      int durationMillis, int startOffset) {     Animation animation;     animation = new RotateAnimation(0, -180, Animation.RELATIVE_TO_SELF,        0.5f, Animation.RELATIVE_TO_SELF, 1.0f);     animation.setFillAfter(true);     animation.setDuration(durationMillis);     animation.setStartOffset(startOffset);     animation.setAnimationListener(new Animation.AnimationListener() {      @Override      public void onAnimationStart(Animation arg0) {}      @Override      public void onAnimationRepeat(Animation arg0) {}      @Override      public void onAnimationEnd(Animation arg0) {        viewgroup.setVisibility(8);        for (int i = 0; i < viewgroup.getChildCount(); i++) {         viewgroup.getChildAt(i).setVisibility(8);         viewgroup.getChildAt(i).setClickable(false);         viewgroup.getChildAt(i).setFocusable(false);        }      }     });     viewgroup.startAnimation(animation); }

有一個animation.setStartOffset(startOffset);是設置animation多長時間以后執行。

最后:代碼下載地址:

此處本站下載。

希望本文所述對大家Android程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
中文字幕亚洲欧美日韩在线不卡| 欧美激情在线观看视频| 国产精品视频yy9099| 国产精品视频中文字幕91| 亚洲午夜精品久久久久久性色| 欧美高清一级大片| 日韩在线不卡视频| 日韩中文在线中文网三级| 日韩免费观看网站| 91精品在线一区| 国产精品久久久久久婷婷天堂| 国产精品草莓在线免费观看| 国产日产久久高清欧美一区| 日韩精品极品在线观看| 亚洲精品99久久久久| wwwwwwww亚洲| 91九色国产视频| 亚洲国产精品女人久久久| 亚洲激情久久久| 精品亚洲精品福利线在观看| 国产精品入口日韩视频大尺度| 免费99精品国产自在在线| 欧美亚洲在线播放| 日韩精品中文字幕在线播放| 日韩有码片在线观看| 亚洲午夜女主播在线直播| 欧美大学生性色视频| 久久久久久久久久亚洲| 热99在线视频| www日韩中文字幕在线看| 精品国产乱码久久久久久天美| 日韩网站免费观看| 国产亚洲日本欧美韩国| 中文字幕在线观看亚洲| 国内精久久久久久久久久人| 亚洲欧美日韩天堂一区二区| www亚洲精品| 亚洲色图av在线| 亚洲国产私拍精品国模在线观看| 成人免费观看a| 国产视频自拍一区| 日韩不卡中文字幕| 亚洲美女福利视频网站| 国产va免费精品高清在线观看| 欧美黑人巨大精品一区二区| 久久久999国产精品| 日韩中文字幕精品| 国产精品人人做人人爽| 97色伦亚洲国产| 国产精品日韩电影| 欧美性xxxxx极品娇小| 日韩大片在线观看视频| 欧美激情精品久久久久久黑人| 国产精品69av| 色偷偷av一区二区三区| 欧美情侣性视频| 日韩av免费看网站| 最近2019中文免费高清视频观看www99| 美女久久久久久久久久久| 日韩av片免费在线观看| 久久频这里精品99香蕉| 国产专区欧美专区| 午夜精品一区二区三区在线视| 国产精品视频26uuu| 日韩免费av片在线观看| 国产免费一区二区三区在线观看| 一本色道久久88综合日韩精品| 国产97色在线| 国产精品第一页在线| 一区二区三欧美| 欧美成人午夜剧场免费观看| 亚洲天堂男人的天堂| 亚洲国产高潮在线观看| 亚洲成人av在线| 一道本无吗dⅴd在线播放一区| 国产97人人超碰caoprom| 伊人久久大香线蕉av一区二区| 亚洲视频免费一区| 揄拍成人国产精品视频| 日韩av在线影视| 国产精品va在线播放我和闺蜜| 亚洲一区二区免费| 欧美日韩色婷婷| 视频在线观看一区二区| 精品亚洲va在线va天堂资源站| 亚洲综合日韩中文字幕v在线| 亚洲欧美国产日韩中文字幕| 久久91亚洲精品中文字幕奶水| 青青在线视频一区二区三区| 国产精品久久久久久久av大片| 欧美成人黑人xx视频免费观看| 91性高湖久久久久久久久_久久99| 欧美亚洲国产日本| 亚洲女人天堂av| 91在线观看免费观看| 7m第一福利500精品视频| 久久精品视频导航| 亚洲国产成人久久| 成人黄色av播放免费| 午夜欧美不卡精品aaaaa| 欧美综合第一页| 97国产精品视频人人做人人爱| 国产成人亚洲精品| 亚洲欧美在线第一页| 国产日本欧美视频| 亚洲最新在线视频| 亚洲人在线视频| 伊人久久综合97精品| 日韩极品精品视频免费观看| 国外色69视频在线观看| 尤物tv国产一区| 日韩在线不卡视频| 亚洲欧洲日产国码av系列天堂| 久久在精品线影院精品国产| 亚洲伊人第一页| 美女黄色丝袜一区| 成人情趣片在线观看免费| 国产精品爽爽爽爽爽爽在线观看| 国产精品av网站| 欧美一区二区三区四区在线| 欧美一级在线亚洲天堂| 久久青草精品视频免费观看| 91成人国产在线观看| 成人黄色在线免费| 欧美色欧美亚洲高清在线视频| 国产视频亚洲精品| 91免费国产网站| 久久久久久亚洲精品中文字幕| 日本国产高清不卡| 欧美日韩国产成人高清视频| 欧美一区二区三区四区在线| 亚洲欧美一区二区三区四区| 国产日本欧美在线观看| 正在播放欧美视频| 亚洲成av人影院在线观看| 国内精品在线一区| 国产精品美女免费视频| 亚洲欧美激情在线视频| 日本午夜精品理论片a级appf发布| 亚洲男子天堂网| 国产精品第七影院| 欧美成人午夜激情视频| 97精品视频在线观看| xxxxx91麻豆| 欧美日韩高清在线观看| 日韩精品视频观看| 91久久久久久久久久久久久| 日韩在线观看免费网站| 91精品综合视频| 精品视频在线播放| 日韩欧美亚洲一二三区| 久久久久久久香蕉网| 91久久在线视频| 91在线观看免费高清完整版在线观看| 久久精品99国产精品酒店日本| 这里只有精品久久| 亚洲精品国产精品久久清纯直播| 国产精品第七影院| 欧洲成人午夜免费大片| 色婷婷av一区二区三区在线观看| 国产精品第一视频| 国产精品一区二区女厕厕| 久久91亚洲精品中文字幕| 国产欧美精品日韩精品|