zoukankan      html  css  js  c++  java
  • 防优酷菜单的实现

    package com.loaderman.youku;
    
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.KeyEvent;
    import android.view.View;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private ImageView ivHome;
        private ImageView ivMenu;
    
        private RelativeLayout rlLevel1;
        private RelativeLayout rlLevel2;
        private RelativeLayout rlLevel3;
    
        private boolean isLevel3Show = true;//标记布局是否显示
        private boolean isLevel2Show = true;//标记布局是否显示
        private boolean isLevel1Show = true;//标记布局是否显示
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            ivHome = (ImageView) findViewById(R.id.iv_home);
            ivMenu = (ImageView) findViewById(R.id.iv_menu);
            rlLevel1 = (RelativeLayout) findViewById(R.id.rl_level1);
            rlLevel2 = (RelativeLayout) findViewById(R.id.rl_level2);
            rlLevel3 = (RelativeLayout) findViewById(R.id.rl_level3);
    
            ivHome.setOnClickListener(this);
            ivMenu.setOnClickListener(this);
    
            //如果给第三层布局加点击事件, 会导致home和menu按钮无法点击
            //解决办法: 将第三层布局写在最底下, 第一层写在最上面, 就不会挡住点击事件了
            rlLevel3.setOnClickListener(this);
        }
    
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.iv_home:
                    System.out.println("home clicked!!!");
                    //如果显示则隐藏;反之亦然
                    if (isLevel2Show) {
                        AnimUtils.hide(rlLevel2);
                        isLevel2Show = false;
    
                        //如果level3显示, 也要隐藏
                        if (isLevel3Show) {
                            AnimUtils.hide(rlLevel3, 200);
                            isLevel3Show = false;
                        }
                    } else {
                        AnimUtils.show(rlLevel2);
                        isLevel2Show = true;
                    }
    
                    break;
                case R.id.iv_menu:
                    System.out.println("menu clicked!!!");
                    //如果显示则隐藏;反之亦然
                    if (isLevel3Show) {
                        AnimUtils.hide(rlLevel3);
                        isLevel3Show = false;
                    } else {
                        AnimUtils.show(rlLevel3);
                        isLevel3Show = true;
                    }
    
                    break;
    
                default:
                    break;
            }
        }
    
        @Override
        public void onBackPressed() {
            super.onBackPressed();
        }
    
        //拦截物理按键
        //拦截不了: home键, 电源键
        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            System.out.println("当前按键:" + keyCode);
    
            //物理菜单键
            if (keyCode == KeyEvent.KEYCODE_MENU) {
                if (isLevel1Show) {
                    AnimUtils.hide(rlLevel1);
                    isLevel1Show = false;
    
                    if (isLevel2Show) {
                        AnimUtils.hide(rlLevel2, 200);
                        isLevel2Show = false;
                    }
    
                    if (isLevel3Show) {
                        AnimUtils.hide(rlLevel3, 300);
                        isLevel3Show = false;
                    }
    
                } else {
                    AnimUtils.show(rlLevel1);
                    AnimUtils.show(rlLevel2, 200);
    
                    isLevel1Show = true;
                    isLevel2Show = true;
                }
    
                return true;//表示已经处理完事件
            }
    
            return super.onKeyDown(keyCode, event);
        }
    }
    
    package com.loaderman.youku;
    import android.view.View;
    import android.view.ViewGroup;
    import android.view.animation.Animation;
    import android.view.animation.RotateAnimation;
    public class AnimUtils {
    
        //利用重载, 可以在不改变原来api的情况下, 增添新的参数
        public static void show(ViewGroup view) {
            show(view, 0);
        }
        public static void hide(ViewGroup view) {
            hide(view, 0);
        }
        //隐藏, 旋转动画
        public static void hide(ViewGroup view, long delay) {
            //围绕底边中心点旋转
            RotateAnimation anim = new RotateAnimation(0, 180, Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 1);
            anim.setDuration(500);
            anim.setFillAfter(true);//动画结束后保持住当时状态
            anim.setStartOffset(delay);//延时多长时间之后再启动动画
            view.startAnimation(anim);
            //禁用所有按钮的点击事件
            int childCount = view.getChildCount();//子控件个数
            for (int i = 0; i < childCount; i++) {
                View child = view.getChildAt(i);//获取第i个子控件
                child.setEnabled(false);//禁用
            }
        }
    
        //显示, 旋转动画
        public static void show(ViewGroup view, long delay) {
            //围绕底边中心点旋转
            RotateAnimation anim = new RotateAnimation(180, 360, Animation.RELATIVE_TO_SELF, 0.5f,
                    Animation.RELATIVE_TO_SELF, 1);
            anim.setDuration(500);
            anim.setFillAfter(true);//动画结束后保持住当时状态
            anim.setStartOffset(delay);//延时多长时间之后再启动动画
            view.startAnimation(anim);
            //启用所有按钮的点击事件
            int childCount = view.getChildCount();//子控件个数
            for (int i = 0; i < childCount; i++) {
                View child = view.getChildAt(i);//获取第i个子控件
                child.setEnabled(true);//启用
            }
        }
    }
    

     activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/activity_main"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="com.loaderman.youku.MainActivity">
        <RelativeLayout
            android:id="@+id/rl_level3"
            android:layout_width="280dp"
            android:layout_height="140dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/level3">
           <ImageView
                android:id="@+id/iv_channel1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_margin="10dp"
                android:src="@drawable/channel1"/>
            <ImageView
                android:id="@+id/iv_channel2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/iv_channel1"
                android:layout_marginBottom="15dp"
                android:layout_marginLeft="35dp"
                android:src="@drawable/channel2"/>
            <ImageView
                android:id="@+id/iv_channel3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/iv_channel2"
                android:layout_marginBottom="12dp"
                android:layout_marginLeft="70dp"
                android:src="@drawable/channel3"/>
            <ImageView
                android:id="@+id/iv_channel4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:src="@drawable/channel4"/>
            <ImageView
                android:id="@+id/iv_channel7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_margin="10dp"
                android:src="@drawable/channel7"/>
            <ImageView
                android:id="@+id/iv_channel6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/iv_channel7"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="15dp"
                android:layout_marginRight="35dp"
                android:src="@drawable/channel6"/>
            <ImageView
                android:id="@+id/iv_channel5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@id/iv_channel6"
                android:layout_alignParentRight="true"
                android:layout_marginBottom="12dp"
                android:layout_marginRight="70dp"
                android:src="@drawable/channel5"/>
        </RelativeLayout>
        <RelativeLayout
            android:id="@+id/rl_level2"
            android:layout_width="180dp"
            android:layout_height="90dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/level2"
            >
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_margin="10dp"
                android:src="@drawable/icon_search"/>
            <ImageView
                android:id="@+id/iv_menu"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerHorizontal="true"
                android:layout_marginTop="10dp"
                android:src="@drawable/icon_menu"/>
            <ImageView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_alignParentRight="true"
                android:layout_margin="10dp"
                android:src="@drawable/icon_myyouku"/>
        </RelativeLayout>
        <RelativeLayout
            android:id="@+id/rl_level1"
            android:layout_width="100dp"
            android:layout_height="50dp"
            android:layout_alignParentBottom="true"
            android:layout_centerHorizontal="true"
            android:background="@drawable/level1"
            >
            <ImageView
                android:id="@+id/iv_home"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:src="@drawable/icon_home"/>
        </RelativeLayout>
    </RelativeLayout>
    

     效果:

  • 相关阅读:
    初始面向对象
    python之路——迭代器和生成器
    函数进阶
    python之路——初识函数
    实现css两端对齐
    http
    background-size
    call和apply的区别
    js兼容性
    面试题
  • 原文地址:https://www.cnblogs.com/loaderman/p/6514745.html
Copyright © 2011-2022 走看看