android曲面屏触摸事件,Android屏幕适配完美解决方案(曲面屏手机也是小Case)
纸上得来终觉浅 绝知此事要躬行。
安卓中最头疼的一个问题就是屏幕适配,然而现在网上关于屏幕适配的博客都是纸上谈兵:dp的概念、dp转px。只有少数博客才是讲到点,比如 鸿洋 大神的 Android 屏幕适配方案。
需要适配的机型
从左到右依次是魅族,华为,小米手机。我们可以看到它们的物理尺寸不尽相同。
适配机型
各机型属性
我们写个小Demo测量出 状态栏高度,导航栏高度,屏幕宽度,屏幕高度,需要注意的是,这四个值单位都是像素。很多小伙伴都容易困惑与像素与厘米的区别,在测量结果中我们可以看到,三个手机都是宽1080px,高1920px(华为机计算应该是144+1776),但是三个手机的物理尺寸都是不相同的,所以我们可以得出结论:
px 和 cm 没有任何关系
各机型属性
我们同样还可以得出一个结论:
1080x1920指的是显示屏,不包括手机外壳
Values
Ok,我们现在来看一下values文件,这个是屏幕适配核心。
values
可以看到,我们分别为1080x1920和1776x1080创建了两个values文件,这样如果手机分辨率是1080x1920时,如果你的代码中有
R.dimen.xxx这样的代码系统会自动在1920x1080文件夹下的dimen文件中查找。同理,如果手机分辨率是1080x1776,系统会自动在1776x1080文件夹下的dimen文件中查找,这样我们创建多个values文件是不是就达到的屏幕适配?
values
我们可以看到,在values-1920x1080文件夹下的dimen文件中dp2px为540px,恰好是1080的一半,而在values-1776x1080文件夹下的dimen文件中则是1080,正好满屏。
效果图
看运行效果图我们能发现,在华为机(1080x1776)中是满屏,而在小米机(1080x1920)则是半屏,所以我们完全可以通过values文件来进行屏幕适配!
授人以渔
这里我借用 鸿洋 大神的一个类。
GenerateValueFiles
我们打开该java文件,并进行如下修改:
baseW and baseH
1080x1776
javac
我们会看到目录下多了res文件夹。
res
通常我们把这些values文件夹复制到我们项目中的res文件夹下就可以了。
values
分析
我们看看能不能真的进行屏幕适配。
假设现在UI给了你一张720x1280的图,我们那个java文件的baseW和baseH分别是1080,1920,所以我们需要将UI妹子给的标注图的px进行转换(实际运用中可以把baseW和baseH改成标注图的分辨率)。
假设一个按钮的高为10px,但这是720x1280的图,所以我们要先转换成1080x1920的像素, 10x1920/1280 = 15px,所以我们直接使用@dimen/y15就可以,但是我们可还有个1080x1776的华为机需要适配呢!10px在华为机中的像素可是 10x1776/1280 = 13.875px,我们去查看values-1776x1080文件夹下dimen文件。
values-1776x1080
可以发现,@dimen/y15在1776x1080的手机中是13.87px,因此实现啦屏幕适配!
GenerateValueFiles.java下载地址 : 猛戳此处
补充
android曲面屏触摸事件,Android屏幕适配完美解决方案(曲面屏手机也是小Case)相关推荐
- Android 6种触摸事件,Android 的触摸事件详解及示例代码
由于触摸(Touch)而触发的事件 Android的事件:onClick, onScroll,onFling等等,都是由许多个Touch组成的.其中Touch的第一个状态肯定是ACTION_DOWN, ...
- android 触摸事件 取消,如何禁用/重新启用Android中的触摸事件?
快速,可能很简单,问题.我有一个视图,其背景是动画,在那段时间,我想禁止用户与视图交互.我的视图是一个FrameLayout,我用onTouchEvent()捕获触摸事件.我试过的解决方案:如何禁用/ ...
- android下zip压缩文件加密解密的完美解决方案,Android之zip文件加密解压及进度条的实现...
zip文件的解压可以使用java的zip库,但是没有实现对加密文件的解压功能,这里可以使用zip4j来实现.具体可以参看该文<Android下zip压缩文件加密解密的完美解决方案 http:// ...
- Unity安卓手机屏幕自适应完美解决方案
本人正在努力建设自己的公众号,大家可以关注公众号,公众号将免费提供大量教学Unity相关内容,除了从Unity入门到数据结构设计模式外,我还会免费分享我再游戏开发中使用的素材,书籍,插件,希望大家可以 ...
- android方向触摸事件,Android触摸事件如何传递?
慕工程0101907 让我们看一个视觉示例.在此处输入图片说明发生触摸事件时,首先会向每个人通知该事件,从活动开始,一直到顶部的视图.然后,每个人都有机会处理该事件,从顶部的视图(触摸区域中Z顺序最高 ...
- android dispatchtouchevent 用法,android – 检测每个触摸事件,而不会覆盖dispatchTouchEvent()?...
回答这可能对他人有帮助.答案将有助于需要拦截触摸事件的库. 如果你不想覆盖dispatchTouchEvent()(Imp,如果你是编程库)方法的活动,那么我们可以使用Window.Callback类 ...
- android方向触摸事件,Android触摸事件传递机制,这一篇就够了
整个触摸事件牵涉到的是,Activity,View,ViewGroup三者的传递机制. 这个触摸事件就是从外层往内层一层层的传递. 整个传递机制,分为3个步骤:分发,拦截,和消费. 1. 触摸事件的类 ...
- android 触摸屏 滑动,android开发:触摸屏触摸事件MotionEvent演示实例
触摸事件,可以包含多点触摸,也可以使用捏合手势缩放,并且放大图片; 多点触摸的实现: num =motionEvent.getPointerCount()//使用MotionEvent的此方法来获取当 ...
- Android ViewGroup拦截触摸事件详解
前言 在自定义ViewGroup中,有时候需要实现触摸事件拦截,比如ListView下拉刷新就是典型的触摸事件拦截的例子.触摸事件拦截就是在触摸事件被parent view拦截,而不会分发给其chil ...
最新文章
- 使用 SAX 解析器简化文档处理程序的编写
- 最喜欢随机森林?周志华团队 DF21 后,TensorFlow 开源决策森林库 TF-DF
- windows编辑好的python代码在linux的vim编辑,缩进问题
- 第一章 为什么使用单元测试
- Python全栈(第一部分)day2
- 【夯实Mysql基础】mysql explain执行计划详解
- 约束条件创建定义表(主码,外码的确定和防止空值等)
- 回文字符串—回文子串—中心扩散法
- free和top显示可用内存不一致
- 科普漫画 | 沙子如何变成芯片?
- 今天开始学C#.NET
- 于.net开发平台项目案例集锦
- angular html页面嵌套,使用AngularJS来实现HTML页面嵌套的方法
- 奇怪的315:大家都知道,为什么要等晚会曝光,管理部门呢
- Zener二极管(稳压二极管)型号对照表--1N52xx系列
- 高级火山图 突出显示自定义的基因volcanic volcano plot duqiang 差异基因火山图
- 网上找了c#仓库管理程序,编译的时候一直 报错
- 苹果视频剪辑计算机配置,视频剪辑后期神器-创作PC黑苹果系统安装与台式电脑配置推荐...
- 删库跑路?我劝你不要这样。
- 极客快讯第 5 期:袁隆平对抖音账号不知情,抖音回应;百度宣布组建智能汽车公司;北京滴滴和花小猪将于一周内完成司机疫苗接种;
热门文章
- 年收入过10亿美元,Veeam看好云数据管理
- [分形学] 谢宾斯基 (Sierpinski) 三角形,也叫垫片
- Luminar 4:AI 天空更换
- java面试一紧张头脑就空了_我在面试、答辩时非常紧张,大脑一片空白,说话时声音发抖,心跳加快,完全放松不下来,不受控制,怎么办?...
- 独家专访 | 获得软银巨额投资的 Mapbox,要如何为自动驾驶提供地图服务?
- 现代控制—状态反馈极点配置函数(计算反馈增益k)
- 第5章第28节:演讲者放映、观众自行浏览和在展台浏览 [PowerPoint精美幻灯片实战教程]
- 超详细基于Qt平台实现C/C++调用Matlab函数全流程
- UE4插件BlueMan_VehicleAI使用
- 创新、变革以及你的有生之年