说的不是安卓系统的应用分屏功能,而是在应用内一个界面想要分屏查看,例如在看文章答题app中,一个界面是文章,一个界面是题目,想要一边看文章一边答题的话,只能来回切换界面,所以需要两者在一个界面,各自分屏可滑动(fragment可实现),并且滑动中间线可重新划分各自高度。


  • 首先在一个界面中布置了两个FrameLayout,中间一个横线用于调整两者高度。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><FrameLayout
        android:id="@+id/frag0"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /><View
        android:id="@+id/addLine"android:layout_width="match_parent"android:layout_height="30dp"android:background="#8a8a8a" /><FrameLayout
        android:id="@+id/frag1"android:layout_width="match_parent"android:layout_height="0dp"android:layout_weight="1" /></LinearLayout>
  • 两个fragment就不贴出来了,fragment本来就是为了碎片化屏幕的,在onCreate方法中find到view并把两个fragment填充到到frameLayout中
frameLayout0 = (FrameLayout) findViewById(R.id.frag0);
frameLayout1 = (FrameLayout) findViewById(R.id.frag1);
mLine = findViewById(R.id.addLine);getSupportFragmentManager().beginTransaction().add(R.id.frag0, new MineFragment(0)).commit();getSupportFragmentManager().beginTransaction().add(R.id.frag1, new MineFragment(1)).commit();
  • 至此分屏查看的功能是完成了,最重要的就是来触摸滑动动态改变两个View高度,所以对activity进行onTouchEvent的触摸监听,符合条件的滑动情况在对两个frameLayout进行重新设置高度。
 @Overridepublic boolean onTouchEvent(MotionEvent event) {switch (event.getAction()) {case MotionEvent.ACTION_DOWN:if (!(event.getY() > mLine.getTop() && event.getY() < mLine.getBottom())) {return super.onTouchEvent(event);}beforeY = event.getY();mtop = event.getY() - mLine.getTop();mbottom =mLine.getBottom()- event.getY();break;case MotionEvent.ACTION_MOVE:frameLayout0.getLayoutParams().height =(int)(event.getY()-getStatusBarHeight(this)-mtop+0.5f);frameLayout1.getLayoutParams().height = (int)(GetScreenHeight(this) - event.getY()-mbottom+0.5f);frameLayout0.requestLayout();frameLayout1.requestLayout();break;case MotionEvent.ACTION_UP:beforeY = event.getY();break;}return true;}

可以看到
在触摸的ACTION_DOWN事件中,如果触摸点的位置不在mLine上,则不进行拦截,触摸事件会传递到fragment中的控件中去,如果在mLine上,则会 return true;进行拦截,不会把触摸事件传递到fragment中。
在触摸的ACTION_MOVE事件中,frameLayout0的高度就等于移动的触摸点的y值减去状态栏高度,再减去触摸点距离mline顶部的值。frameLayout1的高度等于屏幕高度减去触摸点的y值,再减去触摸点距离mline底部的值。下图可见

两个layout的高度设置后,requestLayout方法触发重新布局操作就实现高度的改变了。


至此功能完成,但一些细节就需要自己去添加了,比如线的高度以及触摸后的动画,还有线移动到屏幕底部或顶部后退出分屏状态等等,。。

Android 应用内分屏查看(使用fragment)相关推荐

  1. 【移动开发】Android中强大的适配功能----Fragment(碎片)总结

    作为大多数刚接触Android应用开发的人来说,在一个强大的Activity类中,就可以完成丰富多彩的UI工作,但是杂乱的屏幕分辨率,使得本来好不容易写好的UI,变得不堪入目...该怎么办那? 查阅了 ...

  2. Android PC投屏简单尝试—最终章1

    回顾之前的几遍文章,我们分别通过RMTP协议和简单的Socket 发送Bitmap图片的Base64编码来完成投屏. 回想这系列文章的想法来源-Vysor,它通过 USB来进行连接的.又看到了 scr ...

  3. android长截屏代码,android长截屏原理及实现代码

    android长截屏原理及实现代码 发布时间:2020-08-31 06:55:16 来源:脚本之家 阅读:158 作者:Android笔记 小米系统自带的长截屏应该很多人都用过,效果不错.当长截屏时 ...

  4. android自动截图实现,Android实现截屏功能

    原标题:Android实现截屏功能 该方法主要利用SDK提供的view.getDrawingCache()方法,主要步骤如下: 设置view.setDrawingCacheEnabled(true) ...

  5. Android 手机灭屏流程分析详解

    参考地址:https://www.jianshu.com/p/9241f3a91095 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.前言 2.Pow ...

  6. Android studio录屏按钮不能用怎么办

    众所周知,Android studio具备录制手机屏幕的功能: 点击红框中的按钮即可弹出录屏对话框,设置之后便可录制手机屏幕,可我的studio显示却是这样的效果: 红框中按钮是灰色的,不可用. 设备 ...

  7. android studio多媒体播放器,Android支持全屏、小窗口的视频播放器

    NiceVieoPlayer Android支持全屏.小窗口的视频播放器,完美实现全屏.小窗口播放切换 Features 用IjkPlayer/MediaPlayer + TextureView封装, ...

  8. Android实现截屏和截长图功能的几种方法

    一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...

  9. android强制全屏_如何强制任何Android应用进入全屏浸入模式(无生根)

    android强制全屏 Google released an Android version of Chrome in 2012, and have never bothered to give it ...

最新文章

  1. TCP之深入浅出send和recv
  2. css模糊_如何使用CSS模糊图像?
  3. 多线程和单线程 打印数字到100000 的速度对比
  4. 那些你不知道的 LVS 秘密!
  5. TIOBE 5 月编程语言排行榜:Python、C++ 竞争白热化,Objective-C 已沦为小众语言
  6. IAR报错:新手刚使用K60(非UD)时容易碰到的问题:芯片被锁,missing FlashK60XX.board
  7. 手机通讯录html模板,手机通讯录导模板
  8. MINIST数据集实践
  9. html纵向广告滚动,jquery广告滚动 jquery 实现文字左右滚动
  10. JavaScript中null、underfined、NaN的辨别以及数据类型的检测
  11. 靖哥哥教你如何安装chrome浏览器离线插件
  12. java hevc和heif_关于 iOS 和 macOS 的 HEVC 和 HEIF
  13. ABAP 创建及修改采购申请
  14. 记录从指尖悄悄流逝的时间
  15. 他是阿里年头最久的越南小二,从中供铁军学到地推秘诀
  16. 天融信虚拟企业防火墙学习
  17. 计算机大专生的平均工资水平,大学/大专应届毕业生工资待遇分析报告 - 职业圈...
  18. xcode写在_迷失在Xcode领域
  19. Android Studio:模拟器不能运行 控制台显示 VCPU shutdown request
  20. Python脚本打开默认浏览器登录人人和打开QQ

热门文章

  1. 地图标注不完整图片_全国2020年目前最全的76家冻品水产市场标注地图,值得收藏...
  2. android glide滤镜,Glide 图片形状裁剪 ,滤镜等(示例代码)
  3. Apache中AllowOverride对性能的影响
  4. php垂直搜安装,七大垂直搜索引擎
  5. [SDOI2012] 体育课
  6. java计算机毕业设计VUE技术小区车辆档案车位管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
  7. 注册热键——RegisterHotKey
  8. android fragment不执行onResume,onPause
  9. CRM客户关系管理软件排名
  10. 小迪和小捷的太空之旅——飓风营救篇