Android 应用内分屏查看(使用fragment)
说的不是安卓系统的应用分屏功能,而是在应用内一个界面想要分屏查看,例如在看文章答题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)相关推荐
- 【移动开发】Android中强大的适配功能----Fragment(碎片)总结
作为大多数刚接触Android应用开发的人来说,在一个强大的Activity类中,就可以完成丰富多彩的UI工作,但是杂乱的屏幕分辨率,使得本来好不容易写好的UI,变得不堪入目...该怎么办那? 查阅了 ...
- Android PC投屏简单尝试—最终章1
回顾之前的几遍文章,我们分别通过RMTP协议和简单的Socket 发送Bitmap图片的Base64编码来完成投屏. 回想这系列文章的想法来源-Vysor,它通过 USB来进行连接的.又看到了 scr ...
- android长截屏代码,android长截屏原理及实现代码
android长截屏原理及实现代码 发布时间:2020-08-31 06:55:16 来源:脚本之家 阅读:158 作者:Android笔记 小米系统自带的长截屏应该很多人都用过,效果不错.当长截屏时 ...
- android自动截图实现,Android实现截屏功能
原标题:Android实现截屏功能 该方法主要利用SDK提供的view.getDrawingCache()方法,主要步骤如下: 设置view.setDrawingCacheEnabled(true) ...
- Android 手机灭屏流程分析详解
参考地址:https://www.jianshu.com/p/9241f3a91095 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 1.前言 2.Pow ...
- Android studio录屏按钮不能用怎么办
众所周知,Android studio具备录制手机屏幕的功能: 点击红框中的按钮即可弹出录屏对话框,设置之后便可录制手机屏幕,可我的studio显示却是这样的效果: 红框中按钮是灰色的,不可用. 设备 ...
- android studio多媒体播放器,Android支持全屏、小窗口的视频播放器
NiceVieoPlayer Android支持全屏.小窗口的视频播放器,完美实现全屏.小窗口播放切换 Features 用IjkPlayer/MediaPlayer + TextureView封装, ...
- Android实现截屏和截长图功能的几种方法
一般情况下各种型号的手机都会有自带的截屏功能,也会有诸如"开关机键+音量键"的截屏快捷键,只要手机是亮屏状态,都会将手机屏幕的可视区域(包含状态栏)全部截取下来. 如果开发中想要调 ...
- android强制全屏_如何强制任何Android应用进入全屏浸入模式(无生根)
android强制全屏 Google released an Android version of Chrome in 2012, and have never bothered to give it ...
最新文章
- TCP之深入浅出send和recv
- css模糊_如何使用CSS模糊图像?
- 多线程和单线程 打印数字到100000 的速度对比
- 那些你不知道的 LVS 秘密!
- TIOBE 5 月编程语言排行榜:Python、C++ 竞争白热化,Objective-C 已沦为小众语言
- IAR报错:新手刚使用K60(非UD)时容易碰到的问题:芯片被锁,missing FlashK60XX.board
- 手机通讯录html模板,手机通讯录导模板
- MINIST数据集实践
- html纵向广告滚动,jquery广告滚动 jquery 实现文字左右滚动
- JavaScript中null、underfined、NaN的辨别以及数据类型的检测
- 靖哥哥教你如何安装chrome浏览器离线插件
- java hevc和heif_关于 iOS 和 macOS 的 HEVC 和 HEIF
- ABAP 创建及修改采购申请
- 记录从指尖悄悄流逝的时间
- 他是阿里年头最久的越南小二,从中供铁军学到地推秘诀
- 天融信虚拟企业防火墙学习
- 计算机大专生的平均工资水平,大学/大专应届毕业生工资待遇分析报告 - 职业圈...
- xcode写在_迷失在Xcode领域
- Android Studio:模拟器不能运行 控制台显示 VCPU shutdown request
- Python脚本打开默认浏览器登录人人和打开QQ
热门文章
- 地图标注不完整图片_全国2020年目前最全的76家冻品水产市场标注地图,值得收藏...
- android glide滤镜,Glide 图片形状裁剪 ,滤镜等(示例代码)
- Apache中AllowOverride对性能的影响
- php垂直搜安装,七大垂直搜索引擎
- [SDOI2012] 体育课
- java计算机毕业设计VUE技术小区车辆档案车位管理系统设计与实现源码+mysql数据库+系统+lw文档+部署
- 注册热键——RegisterHotKey
- android fragment不执行onResume,onPause
- CRM客户关系管理软件排名
- 小迪和小捷的太空之旅——飓风营救篇