SplitView

概述

仿猿题库练题里面效果,两个 View 分层,滑动中间的 View 可调节上下 View 的高度

目标效果

实现效果

实现原理

继承 ViewGroup ,内部分为三个子 View ,分别是 top, mid (用来拖动的 View ), bottom

protected void setupViews() {mTop = getChildAt(0);mMid = getChildAt(1);mBottom = getChildAt(2);View handlerView = mMid.findViewById(R.id.handler);if (handlerView == null) {handlerView = mMid;}handlerView.setOnTouchListener(this);
}

维护一个 mSplitHeight ,用来设置分割线(即上下 View 的交界处)的位置
onMeasure(int widthMeasureSpec, int heightMeasureSpec) 中初始化 mSplitHeight 并测量子view的大小

{if (getChildCount() != 3) {throw new RuntimeException("give 3 views");}int height = MeasureSpec.getSize(heightMeasureSpec);if (mSplitHeight == 0) {mSplitHeight = (int)(height * mSplitRatio);}//measure childmeasureChild(mTop, widthMeasureSpec, MeasureSpec.makeMeasureSpec(mSplitHeight, MeasureSpec.EXACTLY));measureChild(mMid, widthMeasureSpec, heightMeasureSpec);measureChild(mBottom, widthMeasureSpec, MeasureSpec.makeMeasureSpec(getMeasuredHeight() - mSplitHeight, MeasureSpec.EXACTLY));
}

在onLayout方法中指定各个子 View 的位置

protected void onLayout(boolean changed, int l, int t, int r, int b) {l = t = 0;mTop.layout(l, t, l + mTop.getMeasuredWidth(), t + mTop.getMeasuredHeight());mMid.layout(l, t + mSplitHeight - mMid.getMeasuredHeight(), l + mMid.getMeasuredWidth(), t + mSplitHeight);mBottom.layout(l, t + mSplitHeight, l + mBottom.getMeasuredWidth(), t + mSplitHeight + mBottom.getMeasuredHeight());}

最后要做的就是监听 mid View 滑动时改变 mSplitHeight 的值了。
在 mid 的 onTouch(View v, MotionEvent event) 中判断,当 MotionEvent.ACTION_MOVE 时,
改变分割线的高度,然后再 requestLayout() 重新绘制即可。

{case MotionEvent.ACTION_MOVE:int delta = (int) (event.getY() - mLastMotionY);if (Math.abs(delta) > mTouchSlop) {if (delta > 0) {mSplitHeight += delta - mTouchSlop;} else {mSplitHeight += delta + mTouchSlop;}if (mSplitHeight < mMinSplitTop || mSplitHeight < mMid.getHeight()) {mSplitHeight = Math.max(mMinSplitTop, mMid.getHeight());} else if (mSplitHeight > getHeight() || mSplitHeight > getHeight() - mMinSplitBottom) {mSplitHeight = Math.min(getHeight(), getHeight() - mMinSplitBottom);}// mSplitHeight 改变之后重绘requestLayout();}return true;
}

项目 GitHub 地址:https://github.com/tsongski/SplitView

仿猿题库练题滑动分屏效果相关推荐

  1. 帝国CMS7.5仿《问答库》题库问答学习平台网站源码 带手机版

    简介: 帝国CMS7.5仿<问答库>题库问答学习平台网站源码 带手机版 开发环境:帝国cms 7.5 安装环境:php+mysql 学历考试等各类题库以及一些常见的普通练习的题目题库供大家 ...

  2. 精仿《问答库》题库问答学习平台网站源码整站源码,帝国CMSv7.5内核,知识付费考试题库

    源码介绍 非常不错的适合做问答和知道类型的网站的源码,帝国cms的内核,优势无需多说了,拿去耍起!! 学历考试等各类题库以及一些常见的普通练习的题目题库供大家查询 特色功能: 1.同步生成 WAP 2 ...

  3. 仿《问答库》题库问答学习平台模板 知识付费网站源码+数据采集

    简介: 源码名称:仿<问答库>题库问答学习平台模板 知识付费网站源码 开发环境:帝国cms 7.5 安装环境:php+mysql 包含火车头采集规则和模块,采集目标站问答库官网. 学历考试 ...

  4. 计算机二级考试题是题库随机抽吗,计算机二级题目是题库原题吗,计算机二级题目是随机抽的吗...

    计算机二级题目是题库原题吗,计算机二级题目是随机抽的吗 2021-04-2011:07:30 来源: 作者:wangziyang office的话选择题不用看的,三道操作题都是原题.学完选择题要花很多 ...

  5. 二级计算机为让利消费者,计算机二级office题库训练题(2)

    D.计算机病毒是一个特殊的寄生程序 15. 以下关于编译程序的说法正确的是( ). A.编译程序属于计算机应用软件,所有用户都需要编译程序 B.编译程序不会生成目标程序,而是直接执行源程序 C.编译程 ...

  6. python填空题_Python题库-填空题

    『Python题库 - 填空题』Python笔试填空题 part 1. Python语言概述和Python开发环境配置 part 2. Python语言基本语法元素(变量,基本数据类型, 基础运算) ...

  7. 全国计算机二级试题题库,2017年3月全国计算机二级office试题题库操作题

    2017年3月全国计算机二级office试题题库操作题 计算机作为一个完整系统所运用的技术.主要有系统结构技术.系统管理技术.系统维护技术和系统应用技术等.下面是小编整理的关于全国计算机二级offic ...

  8. HCIP H12-221 题库 71-120题 讲解

    HCIP H12-221 题库 71-120题 讲解 71.Agreate命令(aggregateipy4-address{mask|mask-length}[as-set|attribute-pol ...

  9. 2016年计算机一级考试试题及答案,2016年计算机一级考试试题题库操作题及答案...

    2016年计算机一级考试试题题库操作题及答案 2016上半年的计算机一级考试时间为3月26-29日,以下内容是由百分网小编为大家整理的计算机一级操作题题库,希望对同学们有帮助! 二.基本操作题(10分 ...

最新文章

  1. 十三、序列化和反序列化(部分转载)
  2. 无惧秋招,您的NLP算法工程师魔鬼训练计划请查收
  3. 进出仓原理_你问我答 | 球磨机组成和工作原理?
  4. Bitmap与IplImage之间的转换
  5. 分布式拒绝服务攻击(DDoS)原理及防范
  6. 链表之单链表约瑟夫问题(三)
  7. mysql的cpu高定位
  8. android 開發人員模式,Android
  9. ai皮肤检测分数_德国猫咪皮肤检测仪,为什么这么火?| 云美来
  10. 这些大佬告诉你,在先进计算与AI领域该往哪个方向冲!
  11. Linus Torvalds 警告:勿用 Linux 5.12 rc1,担心供应链攻击?
  12. 20160319中艺收盘总结
  13. 一个很烂的学生成绩管理系统
  14. 代谢组学常见数据库列表和简介
  15. QT与游戏手柄测试(数据与UI相连,ui界面作出反应)
  16. 感性电路电流计算_如何计算电机的电流?跟转速有关系吗?附案例分析
  17. wps office应用计算机等级考试,全国计算机等级考试一级教程:计算机基础及WPS Office应用(2016年版)...
  18. love2d 编译 android,Love2D游戏脚本在windows平台下打包exe发布教程
  19. 智能名片为什么使用场景都是微信小程序?哪些新玩法值得一试?
  20. android 控件宽度自适应_自适应各Android手机屏幕尺寸的解决方法

热门文章

  1. 专题分纲目录 操作系统之哲学原理
  2. 计算机毕业设计(附源码)python中草药管理系统
  3. 电商产品设计:互联网众筹模式-团购
  4. 谢希仁《计算机网络》笔记
  5. 内外盘期货资管分仓系统
  6. 精品软件 推荐 Windows优化大师 80后都用过的软件
  7. Dell一体机升级SSD
  8. win7此windows系统副本不正正版解决方法
  9. Nutz发送http请求
  10. 基于Linux的LDAP实验小结