zoukankan      html  css  js  c++  java
  • 自定义九宫格式的弹出menu

    效果图:

    二、布局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:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:background="@drawable/bg"
        tools:context=".MainActivity"
          ><!-- tools:context=".MainActivity" -->
        <Button
            android:id="@+id/btn_menu"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_centerHorizontal="true"
            android:text="show/hide Menu" />
    
       
         <RelativeLayout
            android:id="@+id/layout_menu"
            android:layout_width="match_parent"
            android:layout_height="200dp"
            android:layout_alignParentBottom="true" >
    
            <LinearLayout
                android:id="@+id/menu"
                android:layout_width="match_parent"
                android:layout_height="40dp"
                android:background="#dd000000"
                android:gravity="center" >
    
                <TextView
                    android:id="@+id/tv_main"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="常用"
                    android:textColor="#ffffffff" />
    
                <TextView
                    android:id="@+id/tv_utils"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="工具"
                    android:textColor="#ffffffff" />
    
                <TextView
                    android:id="@+id/tv_set"
                    android:layout_width="0dp"
                    android:layout_height="wrap_content"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:text="设置"
                    android:textColor="#ffffffff" />
            </LinearLayout>
    
            <LinearLayout
                android:id="@+id/layout_anim"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_below="@+id/menu"
                android:background="#eeff8c00" >
    
                <ImageView
                    android:id="@+id/iv_cursor"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:scaleType="matrix"
                    android:src="@drawable/img_cursor" />
            </LinearLayout>
    
            <android.support.v4.view.ViewPager
                android:id="@+id/myPager"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/layout_anim"
                android:flipInterval="30"
                android:persistentDrawingCache="animation" />
        </RelativeLayout>
        
    
    </RelativeLayout>

    二、mainactivity

    package com.ct.menu;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import android.app.Activity;
    import android.graphics.BitmapFactory;
    import android.graphics.Matrix;
    import android.os.Bundle;
    import android.os.Parcelable;
    import android.support.v4.view.PagerAdapter;
    import android.support.v4.view.ViewPager;
    import android.support.v4.view.ViewPager.OnPageChangeListener;
    import android.util.DisplayMetrics;
    import android.util.Log;
    import android.view.KeyEvent;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.view.animation.Animation;
    import android.view.animation.ScaleAnimation;
    import android.view.animation.TranslateAnimation;
    import android.widget.AdapterView;
    import android.widget.AdapterView.OnItemClickListener;
    import android.widget.Button;
    import android.widget.GridView;
    import android.widget.ImageView;
    import android.widget.RelativeLayout;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class MainActivity extends Activity implements OnClickListener{
        private TextView tv_main, tv_set, tv_utils;
    
        private ViewPager myPager;
    
        private ImageView iv_cursor;// 动画图片
    
        private List<View> listViews;//
    
        private int currentView;// 当前视图
    
        private int viewOffset;// 动画图片偏移量
    
        private int imgWidth;// 图片宽度
    
        private MyImgBtn imgBtn1, imgBtn2, imgBtn3, imgBtn4;
    
        RelativeLayout layout_meun;
    
        boolean menuShowed;
        
        boolean isOpen=false;
    
        private Button btn_menu;
    
        // ---------------------------------
    
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            this.init();
    
            Log.v("Create", "init is Finish");
        }
    
        public void onStart() {
    
            super.onStart();
    
            this.initImageView();
    
            Log.v("Start", "initImageView is Finish");
    
            this.initViewPager();
    
            Log.v("Start", "initViewPager is Finish");
    
            this.tv_main.setOnClickListener(new myOnClick(0));
            this.tv_utils.setOnClickListener(new myOnClick(1));
            this.tv_set.setOnClickListener(new myOnClick(2));
    
            this.btn_menu.setOnClickListener(this);
    
        }
    
        public void Destroy() {
    
            super.onDestroy();
    
        }
        
    //    ----------------------
        
        /**
         * 监听菜单按键
         */
        public boolean onKeyDown(int keyCode,KeyEvent event){
            
            
            
            if(keyCode==KeyEvent.KEYCODE_MENU){
                
                if (isOpen) {//如果菜单是打开的,就关闭它
                    
                    this.layout_meun.setAnimation(new menuAnimation().hide());
                    this.layout_meun.setVisibility(View.GONE);
                    isOpen=false;
                    
                }else{//如果菜单是关闭的 就打开它
                    myPager.setCurrentItem(0);//打开时默认为选项卡一
                    this.layout_meun.startAnimation(new menuAnimation().show());
                    this.layout_meun.setVisibility(View.VISIBLE);
                    isOpen=true;
                }
                
                
            }
            
            
            
            return true;
            
        }
    
        // --------------------------------------------------------------
    
        public void init() {
            this.tv_main = (TextView) this.findViewById(R.id.tv_main);
            this.tv_utils = (TextView) this.findViewById(R.id.tv_utils);
            this.tv_set = (TextView) this.findViewById(R.id.tv_set);
            this.layout_meun = (RelativeLayout) this.findViewById(R.id.layout_menu);
            this.btn_menu = (Button) this.findViewById(R.id.btn_menu);
            this.layout_meun.setVisibility(View.GONE);
            this.currentView = 0;
            this.viewOffset = 0;
    
        }
    
        // -------------------------
    
        /**
         * 初始化ViewPager
         */
        public void initViewPager() {
    
            this.myPager = (ViewPager) this.findViewById(R.id.myPager);
    
            this.listViews = new ArrayList<View>();
    
            // ------------------------
    
            // 添加每个选项卡的内容
            LayoutInflater inflater = this.getLayoutInflater();
    
            this.listViews.add(inflater.inflate(R.layout.view_main, null));
            this.listViews.add(inflater.inflate(R.layout.view_utils, null));
            this.listViews.add(inflater.inflate(R.layout.view_set, null));
    
            // ----------------------
    
            this.myPager.setAdapter(new myPagerAdapter(this.listViews));
    
            this.myPager.setOnPageChangeListener(new MyOnPageChangeListener());
    
            myPager.setCurrentItem(0);
    
        }
    
        // -------------------------------
    
        private void initImageView() {
    
            this.iv_cursor = (ImageView) this.findViewById(R.id.iv_cursor);
    
            this.imgWidth = BitmapFactory.decodeResource(getResources(),
                    R.drawable.img_cursor).getWidth();// 获取图片宽度
    
            DisplayMetrics dm = new DisplayMetrics();
    
            getWindowManager().getDefaultDisplay().getMetrics(dm);
    
            int screenW = dm.widthPixels;// 获取分辨率宽度
    
            this.viewOffset = (screenW / 3 - this.imgWidth) / 2;// 计算偏移量
    
            Matrix matrix = new Matrix();
    
            // 每次平移的距离
            matrix.postTranslate(viewOffset, 0);
    
            this.iv_cursor.setImageMatrix(matrix);// 设置动画初始位置
    
        }
    
        // -----------------------------------------------------
    
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.actvity_main, menu);
            return true;
        }
    
        // ----------------------------------
    
        /*
         * 
         * 对选项卡单击监听的实现方法
         */
        public class myOnClick implements View.OnClickListener {
    
            int index = 0;
    
            public myOnClick(int currentIndex) {
    
                index = currentIndex;
            }
    
            public void onClick(View v) {
    
                myPager.setCurrentItem(index);
    
            }
    
        }
    
        // -------------------------------
    
        /**
         * 
         * @author xiaoxiong ViewPager 每个页面的适配器
         * 
         */
        public class myPagerAdapter extends PagerAdapter {
    
            public List<View> myListViews;
    
            // -------------------
    
            public myPagerAdapter(List<View> myListViews) {
    
                this.myListViews = myListViews;
    
            }
    
            @Override
            public void destroyItem(View arg0, int arg1, Object arg2) {
    
                ((ViewPager) arg0).removeView(myListViews.get(arg1));
    
            }
    
            @Override
            public void finishUpdate(View arg0) {
    
            }
    
            @Override
            public int getCount() {
    
                return myListViews.size();
    
            }
    
            public Object instantiateItem(View arg0, int arg1) {
    
                if (arg1 < 3) {
                    ((ViewPager) arg0).addView(myListViews.get(arg1 % 3), 0);
    
                }
                switch (arg1) {
                case 0:// 选项卡1
    
                    GridView gridView = (GridView) arg0
                            .findViewById(R.id.myGridView);
    
                    GridAdapter girdViewAdapter = new GridAdapter(
                            MainActivity.this);
    
                    gridView.setAdapter(girdViewAdapter);
    
                    /**
                     * 对 gridView中的选项单击监听
                     */
                    gridView.setOnItemClickListener(new OnItemClickListener() {
    
                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1,
                                int arg2, long arg3) {
    
                            switch (arg2) {
                            case 7:
    
                                MainActivity.this.finish();
                                break;
    
                            default:
    
                                Toast.makeText(MainActivity.this,
                                        "这个是GridView+ViewPager仿UC菜单栏",
                                        Toast.LENGTH_LONG).show();
                                break;
                            }
    
                        }
                    });
    
                    break;
                case 1:// 选项卡2
                    break;
                case 2:// 选项卡3
                    break;
                }
    
                return myListViews.get(arg1);
    
            }
    
            public boolean isViewFromObject(View arg0, Object arg1) {
    
                return arg0 == (arg1);
    
            }
    
            @Override
            public void restoreState(Parcelable arg0, ClassLoader arg1) {
    
            }
    
            @Override
            public Parcelable saveState() {
    
                return null;
    
            }
    
            @Override
            public void startUpdate(View arg0) {
    
            }
    
        }
    
        // -------------------------------------------------
    
        /*
         * 
         * ViewPager 页面改变的监听
         */
        public class MyOnPageChangeListener implements OnPageChangeListener {
    
            int one = viewOffset * 2 + imgWidth;// 页卡1 -> 页卡2 偏移量
    
            int two = one * 2;// 页卡1 -> 页卡3 偏移量
    
            @Override
            public void onPageSelected(int arg0) {
    
                Animation animation = null;
    
                switch (arg0) {
    
                case 0:
    
                    if (currentView == 1) {
    
                        animation = new TranslateAnimation(one, 0, 0, 0);
    
                    } else if (currentView == 2) {
    
                        animation = new TranslateAnimation(two, 0, 0, 0);
    
                    }
    
                    break;
    
                case 1:
    
                    if (currentView == 0) {
    
                        animation = new TranslateAnimation(viewOffset, one, 0, 0);
    
                    } else if (currentView == 2) {
    
                        animation = new TranslateAnimation(two, one, 0, 0);
    
                    }
    
                    break;
    
                case 2:
    
                    if (currentView == 0) {
    
                        animation = new TranslateAnimation(viewOffset, two, 0, 0);
    
                    } else if (currentView == 1) {
    
                        animation = new TranslateAnimation(one, two, 0, 0);
    
                    }
    
                    break;
    
                }
    
                currentView = arg0;
    
                animation.setFillAfter(true);// True:图片停在动画结束位置
    
                animation.setDuration(300);
    
                iv_cursor.startAnimation(animation);
    
            }
    
            @Override
            public void onPageScrolled(int arg0, float arg1, int arg2) {
    
            }
    
            @Override
            public void onPageScrollStateChanged(int arg0) {
    
            }
    
        }
    
        // --------------------------------------------
    
        /**
         * 菜单单击事件监听(控制显示和隐藏菜单)
         */
        public void onClick(View v) {
    
            if (v.getId() == R.id.btn_menu) {
    
                menuAnimation anim = new menuAnimation();
    
                if (this.menuShowed) {
    
                    this.menuShowed = false;
                    this.layout_meun.setAnimation(anim.hide());
                    this.layout_meun.setVisibility(View.GONE);
    
                } else {
                    myPager.setCurrentItem(0);//打开时默认为选项卡一
                    this.menuShowed = true;
                    this.layout_meun.startAnimation(anim.show());
                    this.layout_meun.setVisibility(View.VISIBLE);
                }
            }
    
        }
    
        // ------------------------------------------------------
    
        /*
         * 隐藏和显示菜单动画
         */
        public class menuAnimation {
    
            Animation showMenu, hideMenu;
    
            public Animation show() {
    
                // showMenu=new TranslateAnimation(0, 0, 0, 0,
                // Animation.RELATIVE_TO_SELF, 0, Animation.RELATIVE_TO_SELF, 1);
                showMenu = new ScaleAnimation(0, 1, 0, 1,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 0);
                showMenu.setDuration(1000);
                return showMenu;
            }
    
            public Animation hide() {
    
                // hideMenu=new TranslateAnimation(0, 0, 0, 0,
                // Animation.RELATIVE_TO_SELF, 1, Animation.RELATIVE_TO_SELF, 0);
                hideMenu = new ScaleAnimation(1, 0, 1, 0,
                        Animation.RELATIVE_TO_SELF, 0.5f,
                        Animation.RELATIVE_TO_SELF, 1);
    
                hideMenu.setDuration(1000);
    
                Log.v("menuAnimation", "hide");
    
                return hideMenu;
    
            }
    
        }
    
        
        
    }

    三、GridAdapter

    package com.ct.menu;
    
    import android.content.Context;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.BaseAdapter;
    import android.widget.ImageView;
    import android.widget.TextView;
    
    public class GridAdapter extends BaseAdapter{
        private Context mContext;
        private int[] resId = {R.drawable.s1,R.drawable.s2,R.drawable.s3,
                R.drawable.s4,R.drawable.s5,R.drawable.s6,R.drawable.s7,R.drawable.s8};
        private String[] stringId={"加入书签","书签/历史","刷新","夜间模式","账户","下载文件","全屏","退出"};
        private LayoutInflater mInflater;
        public GridAdapter(Context mContext){
            this.mContext = mContext;
            mInflater = LayoutInflater.from(mContext);
        }
    
        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return resId.length;
        }
    
        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }
    
        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return arg0;
        }
    
        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub
            if(arg1 == null){
                arg1 = mInflater.inflate(R.layout.myimabtn, null);
            }
            TextView tv = (TextView) arg1.findViewById(R.id.imgbtn_text);
            ImageView img = (ImageView) arg1.findViewById(R.id.imgbtn_img);
            tv.setText(stringId[arg0]);
            img.setImageResource(resId[arg0]);
            return arg1;
        }
    
    }

    四、view_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#77ff0000"
        android:orientation="vertical" >
        
        <GridView 
            android:id="@+id/myGridView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:numColumns="4"
            android:layout_margin="10dp"
            android:horizontalSpacing="20dp"
            android:gravity="center"
            android:verticalSpacing="20dp"
    
            ></GridView>
    
        
    
    </LinearLayout>
  • 相关阅读:
    hive 调优
    nohup
    安装ElasticSearch 6.1.1 head插件
    101. Symmetric Tree
    67. Add Binary
    70. Climbing Stairs
    896. Monotonic Array
    66. Plus One
    27. Remove Element
    Apache Tomcat文件包含漏洞风险大,威胁全球约8万台服务器
  • 原文地址:https://www.cnblogs.com/ct732003684/p/2860890.html
Copyright © 2011-2022 走看看