精华内容
下载资源
问答
  • 下面的截图……哎,因为1080P在Windows 10上虽然适配了,但大部分软件并没有跟上,比如某个录制GIF的软件,所以这里一定的偏移导致画面不完整,但效果大概就是这么一个效果了。MainUI.java首先需要这么一个,在...

    下面的截图……哎,因为1080P在Windows 10上虽然适配了,但大部分软件并没有跟上,比如某个录制GIF的软件,所以这里有一定的偏移导致画面不完整,但效果大概就是这么一个效果了。

    这里写图片描述

    MainUI.java

    首先需要这么一个类,在这里一些UI的滑动呀之类的都会定义。首先吧,定义好这些变量,当然了,实际开发过程中肯定需要哪一个就添加上哪一个的。

        private Context context;  // 上下文
        private FrameLayout leftMenu;    // 左边部分
        private FrameLayout middleMenu;  // 中间部分
        private FrameLayout rightMenu;   // 右边部分
        private FrameLayout middleMask;  // 蒙版效果
        private Scroller mScroller;    // 滑动动画
        public static final int ID = 0;    // ID
        public static final int LEFT_ID = ID+0xaabbcc;
        public static final int MIDDLE_ID = ID+0xaaccbb;
        public static final int RIGHT_ID = ID+0xccbbaa;

    构造函数也是不能少的。

        public MainUI(Context context) {
            super(context);
            initView(context);
        }
    
        public MainUI(Context context, AttributeSet attrs) {
            super(context, attrs);
            initView(context);
        }

    initView就是用来初始化视图的,相应的功能我都写在注释上了,就不多废话了。

        // 初始化视图
        private void initView(Context context){
            this.context=context;
            mScroller = new Scroller(context,new DecelerateInterpolator());
            leftMenu=new FrameLayout(context);
            middleMenu = new FrameLayout(context);
            rightMenu = new FrameLayout(context);
            middleMask = new FrameLayout(context);
            leftMenu.setBackgroundColor(Color.RED);  // 设置背景颜色
            middleMenu.setBackgroundColor(Color.GREEN);
            rightMenu.setBackgroundColor(Color.RED);
            middleMask.setBackgroundColor(0x88000000);
            leftMenu.setId(LEFT_ID);
            middleMenu.setId(MIDDLE_ID);
            rightMenu.setId(RIGHT_ID);
            addView(leftMenu);   // 添加至View
            addView(middleMenu);
            addView(rightMenu);
            addView(middleMask);
            middleMask.setAlpha(0);  // 设置middleMask的透明度
        }

    然后就是它们的一些布局呀,balabala……

        @Override
        protected void onMeasure(int widthMeasureSepc, int heightMeasureSpec){
            super.onMeasure(widthMeasureSepc, heightMeasureSpec);
            middleMenu.measure(widthMeasureSepc, heightMeasureSpec);
            middleMask.measure(widthMeasureSepc,heightMeasureSpec);
            int realWidth = MeasureSpec.getSize(widthMeasureSepc);  // 获取实际(屏幕)宽度
            int tempWidthMeasure = MeasureSpec.makeMeasureSpec(
                    (int)(realWidth*0.7f), MeasureSpec.EXACTLY);  // 左右侧的宽度为中间宽度的0.7
            leftMenu.measure(tempWidthMeasure, heightMeasureSpec);  // 左右侧的高度和中间的一样
            rightMenu.measure(tempWidthMeasure, heightMeasureSpec);
        }
    
        @Override
        protected void onLayout(boolean changed, int l, int t, int r,int b){  // l,t,r,b分别为中间部分的左、上、右、下边界
            super.onLayout(changed, l, t, r, b);  // 设置布局
            middleMenu.layout(l, t, r, b);   // 中间部分的四个边界不变
            middleMask.layout(l, t, r, b);  // 蒙版的四个边界和中间部分一样
            leftMenu.layout(l - leftMenu.getMeasuredWidth(), t, r, b); // 左侧部分的左边边界等于中间部分的左边边界减去左侧部分的宽度
            rightMenu.layout(l + middleMenu.getMeasuredWidth(), t,  // 右侧部分的左边边界则等于中间部分的左边边界加上中间部分的宽度
                    l + middleMenu.getMeasuredWidth() +   // 右侧部分的右边边界等于中间部分的左边边界加上中间部分的宽度加上右侧部分的宽度
                            rightMenu.getMeasuredWidth(), b);
        }
        public float onMiddleMask(){
            System.out.println("透明度"+middleMask.getAlpha());
            return middleMask.getAlpha();
        }
    
        @Override
        public void scrollTo(int x, int y){
            super.scrollTo(x,y);
            onMiddleMask();  // 输出透明度
            int curX = Math.abs(getScrollX());
            float scale = curX/(float)leftMenu.getMeasuredWidth();  // 设置透明度的渐变
            middleMask.setAlpha(scale);
        }

    再用两个布尔值来确定是否在左右滑动等。

        private boolean isTestComete;  // 测试是否完成
        private boolean isleftrightevent;  // 判断是否是左右滑动
        @Override
        public boolean dispatchTouchEvent(MotionEvent ev){
            if(!isTestComete){  // 没有完成滑动动作
                getEventType(ev);   // 继续调用事件进行判断
                return true;
            }
            if(isleftrightevent){   // 左右滑动
                switch (ev.getActionMasked()) {
                    case MotionEvent.ACTION_MOVE:
                        int curScrollX = getScrollX();
                        int dis_x = (int) (ev.getX() - point.x);
                        int expectX = -dis_x + curScrollX;
                        int finalX = 0;
                        if (expectX < 0) {
                            finalX = Math.max(expectX, -leftMenu.getMeasuredWidth());
                        } else {
                            finalX = Math.min(expectX, rightMenu.getMeasuredWidth());
                        }
                        scrollTo(finalX, 0);
                        point.x = (int) ev.getX();
                        break;
    
                    case MotionEvent.ACTION_UP:
                    case MotionEvent.ACTION_CANCEL:
                        curScrollX = getScrollX();
                        if (Math.abs(curScrollX) > leftMenu.getMeasuredWidth() >> 1) {
                            if (curScrollX < 0) {
                                mScroller.startScroll(curScrollX, 0, -leftMenu.getMeasuredWidth() - curScrollX, 0, 200);
                            } else {
                                mScroller.startScroll(curScrollX, 0, leftMenu.getMeasuredWidth() - curScrollX, 0, 200);
                            }
                        } else {
                            mScroller.startScroll(curScrollX, 0, -curScrollX, 0, 200);
                        }
                        invalidate();
                        isleftrightevent = false;
                        isTestComete = false;
                        break;
                }
            }else{
                switch (ev.getActionMasked()){
                    case MotionEvent.ACTION_UP:
                        isleftrightevent = false;
                        isTestComete = false;
                        break;
                    default:
                        break;
                }
            }
            return super.dispatchTouchEvent(ev);
        }
    @Override
        public void computeScroll(){
            super.computeScroll();
            if(!mScroller.computeScrollOffset()){
                return;
            }
            int tempX = mScroller.getCurrX();
            scrollTo(tempX, 0);
        }
    
        private Point point = new Point();
        private static final int TEST_DIS = 20;
        private void getEventType(MotionEvent ev){
            switch (ev.getActionMasked()){
                case MotionEvent.ACTION_DOWN:
                    point.x = (int)ev.getX();
                    point.y = (int) ev.getY();
                    super.dispatchTouchEvent(ev);
                    break;
                case MotionEvent.ACTION_MOVE:
                    int dX = Math.abs((int)ev.getX() - point.x);
                    int dY = Math.abs((int)ev.getY() - point.y);
                    if(dX >= TEST_DIS && dX>dY ){ // 左右滑动
                        isleftrightevent = true;
                        isTestComete = true;
                        point.x = (int)ev.getX();
                        point.y = (int)ev.getY();
                    }else if(dY>=TEST_DIS && dY>dX ){   // 上下滑动
                        isleftrightevent = false;
                        isTestComete = true;
                        point.x = (int)ev.getX();
                        point.y = (int)ev.getY();
                    }
                    break;
                case MotionEvent.ACTION_UP:
                case MotionEvent.ACTION_CANCEL:
                    super.dispatchTouchEvent(ev);
                    isleftrightevent = false;
                    isTestComete = false;
                    break;
            }
        }

    LeftMenu.java

    下面继续看看如何在左侧的目录中添加一个Button。

    你需要创建一个LeftMenu类,并扩展Fragment,因此你需要

    import android.support.v4.app.Fragment;

    如果你不知道如何添加,请看这里:

    在下面这段代码之前你需要再新建一个left.xml布局文件,其中添加一个Button1。

        @Override
          public View onCreateView(LayoutInflater inflater,
                                   @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
            View v = inflater.inflate(R.layout.left, container,false);
            v.findViewById(R.id.button1).setOnClickListener(new View.OnClickListener() {
    
                @Override
                public void onClick(View v) {
                    System.out.println("Hello nomasp");
                }
            });
            return v;
        }

    MainActivity.java

    现在你就需要来create它们了。

        private MainUI mainUI;
        private LeftMenu leftMenu;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            mainUI = new MainUI(this);
            setContentView(mainUI);
            leftMenu = new LeftMenu();
            getSupportFragmentManager().beginTransaction()
                    .add(MainUI.LEFT_ID, leftMenu).commit();
        }

    当然了,这里的MainActivity也需要扩展FragmentActivity,也就是要导入androidsupportv4.jar,至于如何导入请看前文的导航链接。

    当然了,完整的代码你可以从这里Fork:GitHub

    展开全文
  • windows 程序设计

    2011-07-24 21:16:30
    一个Windows的.EXE文件中有使用到的不同动态链接库的参考数据,所使用的函数即在那些动态链接库中。当Windows程序被加载到内存中时,程序中的呼叫被指向DLL函数的入口。如果该DLL不在内存中,就把它加载到内存中。 ...
  • 根据当前系统non-Unicode设置决定修复后的启动菜单中/英优先级 NT5.x+NT6.x的多系统中 - 当存在多个NT5.x时,修复后BCD显示的NT5.x相应菜单为“Earlier Version of Windows”, 当只有一个NT5.x系统,修复后BCD中...
  • OllyDBG v1.10 汉化第

    热门讨论 2011-05-19 23:11:43
    启动: 您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一个正在运行的程序。OllyDbg支持即时调试。OllyDbg根本不需要安装,...
  • 2004-2010软考程序员真题

    热门讨论 2012-09-27 12:33:00
     60、CPU中有一个程序计数器(又称指令计数器),它用于存放  A)正在执行的指令的内容 B)下一条要执行的指令的内容  C)正在执行的指令的内存地址 D)下一条要执行的指令的内存地址 61、与十六进制数值CD等值的十进制...
  • vfp6.0系统免费下载

    2009-09-17 13:49:13
    若想打印这些附注,请从“文件”菜单中选择“打印”命令。此文档分为以下四部分: --------------------------------------------------------------------- 部分 1. 技术支持与市场 部分 2. Visual FoxPro 6.0 新增...
  • 主要内容C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows常用控件的使用、...
  • 本书是第I卷,以开发人员在项目开发经常遇到的问题和必须掌握的技术为中心,介绍了应用C#进行程序开发各个方面的知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 本书是第I卷,以开发人员在项目开发经常遇到的问题和必须掌握的技术为中心,介绍了应用C#进行程序开发各个方面的知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 本书是第I卷,以开发人员在项目开发经常遇到的问题和必须掌握的技术为中心,介绍了应用C#进行程序开发各个方面的知识和技巧,主要包括C#编程基础、Windows窗体、控件应用、文件操作、C#与Office高效开发、图形...
  • 全书分6篇共25章,主要内容C#开发环境的使用、C#语言基础应用、字符串处理技术、数组和集合的使用、面向对象编程技术、数据结构与算法、Windows窗体基础、特色窗体界面、窗体控制技术、MDI窗体和继承窗体、Windows...
  • MFC的程序框架剖析

    2015-03-05 09:53:19
    这是因为在CXXXXApp::InitInstance()函数中有“CCommandLineInfo cmdInfo;”这个的构造函数是这样的:CCommandLineInfo::CCommandLineInfo() { m_bShowSplash = TRUE; m_bRunEmbedded = FALSE; m_bRunAutomated...
  • 新增导出功能,可按知识分类体系的层次结构导出到Windows资源管理器;并增加“导入功能”是否保留层次结构的选择 修改原知识点默认文档只能为“Word”文件为支持任意类型文件功能 新增知识分类体系分类搜索功能 ...
  • 新增导出功能,可按知识分类体系的层次结构导出到Windows资源管理器;并增加“导入功能”是否保留层次结构的选择 修改原知识点默认文档只能为“Word”文件为支持任意类型文件功能 新增知识分类体系分类搜索功能 ...
  • 新增导出功能,可按知识分类体系的层次结构导出到Windows资源管理器;并增加“导入功能”是否保留层次结构的选择 修改原知识点默认文档只能为“Word”文件为支持任意类型文件功能 新增知识分类体系分类搜索功能 ...
  • 修改扩展界面支持库,解决单击卷帘菜单后导致日期框不能弹出下拉窗口的BUG。 4. 修改XP风格支持库,解决GDI资源泄露,以及在使用通用组件库六时组合框标题出现重影的BUG。 5. 修改扩展界面支持库一,解决树形框...
  • flash shiti

    2014-03-14 10:32:41
    6.Flash查看(View)菜单中,Work Area表示? A. 将作品编辑区域以“工作区”方式显示 B. 在编辑区域中显示标尺 C. 在编辑区域中显示底格辅助线 D. 设置“磁铁”功能 7.Flash5中,Common Library默认共有几公用...
  • asp.net知识库

    2015-06-18 08:45:45
    在ASP.NET使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296...
  • 如果不能在启动目录(默认为 %systemroot%System32)找到该文件,将试着在 Windows 安装 CD 找到它。如果多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart  创建和删除硬盘...
  • 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296...
  • 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296...
  • 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296...
  • 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296...
  • 0291 在系统菜单中添加菜单项 189 0292 在状态栏中放置其他组件 189 0293 改变下拉列表的文字颜色 190 8.7 窗体的特殊效果 191 0294 如何动态分割窗体 191 0295 如何将应用程序背景与桌面融合 191 0296...
  • Windows、支持复式记账,相比 Excel,麻烦的就是需要记录的东西比较多(其实 Excel 也可以复式记账,不过功能实现上相对麻烦,不如专业软件省心) ,好处是你可以精确知道自己多少钱了(或者,钱在了?...
  • 3.11 判断字符串中有多少汉字 3.12 去除字符串的前后空格 3.13 刷新时清空所有文本框 3.14 随意改变大小的文本框 3.15 文本框的自动全选 3.16 文本框滚动导航 3.17 按钮获取焦点 3.18 文本框获取焦点弹出下拉框 3.19...

空空如也

空空如也

1 2 3 4
收藏数 67
精华内容 26
关键字:

windows菜单中有哪三类