作者 | sanmianti

来源 | CSDN博客

出品 | CSDN(ID:CSDNnews)

前几天刷抖音时,看到一款壁纸,显示的是诺基亚时代的键盘机样式,昏黄的屏幕显示着【有内鬼,终止交易】的消息内容。感觉很有创意,记忆一下飘到十年前,那时候手机没有微信,没有QQ,没有抖音~蛮荒时代,大家都是通过短信聊天儿,一条信息一毛钱,偶尔通过移动梦网上网充个浪,一不小心用掉3、5M流量然后电话就欠费停机了, 哈哈哈哈。

既然那么有时代感,那么能引起我们共同的追忆,想着如果能做一款应用,它不仅仅是一款壁纸,而且可以点击按键,甚至可以收发短信,拨打电话,岂不是很酷。光说不练假把式,说干就干,接下来就看我们如何实现它!

实现思路

先给大家看一下效果图:

看似复杂,实际上整个应用就由一个主activity架起,activity布局上半部分是Android原生的两个ImageView(MyNokia 图标及模拟屏幕效果),布局下半部分即键盘处是一个WebView内嵌一个本地页面,键盘效果由本地HTML网页渲染得到,通话及短信都是调用的系统界面。

该应用的难点在于如何准确的在一张图片上的各个部位绑定监听事件,例如数字键、星号键、确认键等等。网上有各种实现思路,但尝试后发现都不太理想,要么过于复杂、要么在不同设备上适配性不佳,监听点击位置不准确。

后来转变思路,尝试将该图片切割为不同的小模块,然后为每一个模块View绑定监听事件,最后将各个子模块合并在一起,从视觉效果上就像一张完整的图片。

比较幸运的是之前有一定的PS使用经验,在PS里面有一个非常好用的工具可以帮助我们快速完成上述切割步骤。该工具叫【切片工具】,使用切片工具将目标图片划分为一个一个小模块后,然后选择【文件】→【导出】→【存储为web格式】,PS自动会将图片切割为一个一个的小模块(item)然后组合在一起生成一个HTML文件,该HTML打开后渲染出切割前的完整图片样式。切割完成后我们在应用中直接嵌入该HTML,同时为HTML中的每一个item绑定监听事件,并将点击事件透传给原生activity进行处理即可。

详细代码

Github 源码:https://github.com/sanmianti/MyNokia

layout布局文件

两个ImageView分别显示NOKIA Logo和屏幕效果,三个TextView分别对应着【销毁】按钮和【退出】按钮以及屏幕中央正文显示,一个Web用于加载本地HTML渲染出键盘效果。

 1<?xml version="1.0" encoding="utf-8"?>23<layout xmlns:app="http://schemas.android.com/apk/res-auto">45    <android.support.constraint.ConstraintLayout67    ......89        android:layout_width="match_parent"
10
11        android:layout_height="match_parent">
12
13
14
15        <ImageView
16
17        ......
18
19            android:id="@+id/imageView"
20
21            android:layout_width="match_parent"
22
23            android:layout_height="wrap_content"/>
24
25
26
27        <ImageView
28
29        ......
30
31            android:id="@+id/imageView2"
32
33            android:layout_width="match_parent"
34
35            android:layout_height="0dp"
36
37            android:src="@drawable/screen"/>
38
39
40
41        <TextView
42
43        ......
44
45            android:id="@+id/input"
46
47            android:layout_width="wrap_content"
48
49            android:layout_height="wrap_content"
50
51            android:text="讯息:\n\n有内鬼,终止交易!"/>
52
53
54
55        <TextView
56
57               ......
58
59            android:layout_width="wrap_content"
60
61            android:layout_height="wrap_content"
62
63            android:text="销毁"/>
64
65
66
67        <TextView
68
69               ......
70
71            android:layout_width="wrap_content"
72
73            android:layout_height="wrap_content"
74
75            android:padding="24dp"
76
77            android:text="退出"/>
78
79
80
81        <WebView
82
83        ......
84
85            android:id="@+id/webview_keyboard"
86
87            android:layout_width="0dp"
88
89            android:layout_height="0dp"/>
90
91    </android.support.constraint.ConstraintLayout>
92
93</layout>

拨打电话

 1private void callPhone(String number) {23    if (TextUtils.isEmpty(number)) {45        showToastMessage("请输入手机号");67    }else {89        Intent intent = new Intent();
10
11        intent.setAction(Intent.ACTION_CALL);
12
13        Uri data = Uri.parse("tel:" + number);
14
15        intent.setData(data);
16
17        startActivity(intent);
18
19    }
20
21}

跳转至短信列表

 1private void toSMSList(){23    try{45        Intent intent4 = new Intent();67        intent4.setClassName("com.android.mms","com.android.mms.ui.ConversationList");89        startActivity(intent4);
10
11    }catch (Exception e){
12
13        showToastMessage("打开短信失败");
14
15    }
16
17
18
19}

打开通讯录

 1private void toAddressList(){23    try{45        Intent intent = new Intent(Intent.ACTION_VIEW, ContactsContract.Contacts.CONTENT_URI);67        startActivityForResult(intent, 0);89    }catch (Exception e){
10
11        showToastMessage("打开通讯录失败");
12
13    }
14
15}

加载键盘布局及监听JS点击事件

1binding.webviewKeyboard.loadUrl("file:///android_asset/15694580471773267.html");
3binding.webviewKeyboard.addJavascriptInterface(new MainActivityJS(), "jsObj");

说那么多,看的可能云里雾里,不妨结合源码看一下,跑一下demo,主代码拢共不到300行。很简单,聪明的你肯定一看就懂。如遇到任何问题,欢迎留言反馈。

源码及下载

Github MyNokia 源码:

https://github.com/sanmianti/MyNokia

点我下载安装包:https://download.csdn.net/download/u012719153/12196860

原文链接:

https://blog.csdn.net/u012719153/article/details/104548331

【End】

在全民抗疫的特殊时期下,在人员复杂、流动量大地方的出入口处都设置了无接触式无感红外人体测温系统

在这次疫情防控中,无感人体测温系统发挥了怎样的作用?高精准的无感人体测温系统的核心技术武器是什么?对于开发者们来说,大家应该了解哪些技术

今晚8点多场景疫情防控:解读云边端联动下的全栈 AI 技术应用

推荐阅读 

☞腾讯朋友、钉钉等被微信违规公示点名;谷歌更新安卓修复数百万台芯片漏洞;微软终止支持.NET Core 3.0 | 极客头条

☞独家揭秘阿里自研飞天操作系统洛神平台如何支撑起 2684 亿全球大促!| 问底中国 IT 技术演进

☞为什么说Transformer就是图神经网络?

☞我在武汉卖手机

☞必看!Spark 进阶之路之「SparkSQL」入门概述 | 博文精选

☞比特币归谁所有?有人通过分析区块链数据集找到答案

你点的每一个在看,我认真当成了喜欢

【有内鬼,终止交易】风靡朋友圈的壁纸,实现代码竟如此简单 | 原力计划相关推荐

  1. java 朋友圈分享接口_微信发朋友圈api接口调用代码

    微信发朋友圈api接口调用代码,推送微信朋友圈.发朋友圈 /** * 触发推送朋友圈列表 * @author wechatno:tangjinjinwx * startTime传秒 * @blog h ...

  2. java 朋友圈分享接口_Java实现微信公众平台朋友圈分享功能详细代码

    其实分享的方法在微信官网有较为详细的文档说明,现就其中一些比较绕的步骤进行总结,有问题随时交流哈. 首先微信其实已经自带分享到朋友圈,朋友,qq空间等功能,对于开发微信专门提供了一个接口,可以根据需要 ...

  3. JAVA 实现朋友圈_Java实现微信公众平台朋友圈分享功能详细代码

    其实分享的方法在微信官网有较为详细的文档说明,现就其中一些比较绕的步骤进行总结,有问题随时交流哈. 首先微信其实已经自带分享到朋友圈,朋友,qq空间等功能,对于开发微信专门提供了一个接口,可以根据需要 ...

  4. html图片排列布局下面字_css实现朋友圈照片排列布局代码实例

    本篇文章小编给大家分享一下css实现朋友圈照片排列布局代码实例,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 首先可以打开朋友圈观察不同图片数量的几种布局 ...

  5. 风靡朋友圈的HTML5游戏去哪了

    <围住神经猫>等基于HTML5技术的小游戏在微信朋友圈里都引起了不小的轰动,然而很多开发者都尝试复制其奇迹,并希望通过接入广告获取收入. 因此,前端时间不少用户的朋友圈不断被H5游戏刷屏, ...

  6. 怎样关闭微信朋友圈的广告?方法其实很简单!

    2020待在家已经要发毛了,待在家里无聊只能刷微博.刷抖音.刷朋友圈...刷朋友圈除了微商消息还会出现各种莫名其妙的广告~ 这个广告为什么会出现呢?因为这些金主爸爸给了腾讯金钱啊~而广告收入是腾讯等互 ...

  7. 朋友圈发圈助手文案,头像,壁纸组合微信小程序源码下载

    这是一款微信朋友圈助手的一款小程序源码 内包含了朋友圈文案,壁纸,头像等等 每一个都包含了多个大分类 比如发圈助手有正能量,节假日祝福,搞笑段子等等 壁纸和头像自然也会有不同的分类,具体大家可以看演示 ...

  8. 微信小程序:朋友圈发圈助手文案,头像,壁纸组合

    这是一款微信朋友圈助手的一款小程序源码 内包含了朋友圈文案,壁纸,头像等等 每一个都包含了多个大分类 比如发圈助手有正能量,节假日祝福,搞笑段子等等 壁纸和头像自然也会有不同的分类,具体大家可以看演示 ...

  9. 真相:朋友圈的“小黄图”从刷爆到被封的“惊魂七小时”

    9月28日,雷锋网编辑睡前在刷朋友圈,突然看到晚上9点47分朋友小西发了一个朋友圈,就是下面这张图. 内容让人会心一笑,心里感叹:哈哈,这个小西! 第二天才发现,这种"小黄图"昨晚 ...

最新文章

  1. 初学架构设计的第一步:需求、愿景与架构
  2. LinkedIn 开源成功的秘密
  3. sys.argv[]学习
  4. java 10-4 Scanner方法
  5. java单例模式几种实现方式
  6. Java 8流和Lambda表达式–解析文件示例
  7. tkinter的GUI设计:界面与逻辑分离(三)-- 多页面
  8. 全球边缘计算大会:阿里云资深技术专家李克畅谈边缘计算的技术趋势与挑战
  9. 刷题总结——瞭望塔(bzoj1038)
  10. linux紧急救援模式,如何在 Ubuntu 18.04 中启动到救援模式或紧急模式
  11. Java语言开发的开源商城系统——Javashop简介
  12. Roslyn入门(1):一个简单修改C#代码的例子
  13. 【双轨】加权分红+三级分销+见点奖+级差源码系统 演示网站介绍
  14. 实验2014052801:动态网页中的动态思想
  15. 测试工程师如何提升自己
  16. PM2.5检测 -- PMS7003 开发程序
  17. cbm+soma+simm ibm的SOA实施方法论
  18. Ubuntu20.04台式机网线连接Win10笔记本上网(亲测)
  19. ubuntu 升级后无法连接wifi问题(Wireless 8265 / 8275网卡)
  20. 电子信息类课程自学路线

热门文章

  1. favicon.ico 404的问题(title栏前面的图标)
  2. C语言中全局变量、局部变量、静态全局变量、静态局部变量的区别 (转)
  3. Sqoop导出模式——全量、增量insert、更新update的介绍以及脚本示例
  4. Java入门学习笔记之变量与计算
  5. centos 更新源_centos6 更换yum源
  6. 天池学习赛——街景字符编码识别(得分上0.93)
  7. yii配置mysql_YII2中配置MySQL读写分离
  8. 内窥镜冲洗装置行业调研报告 - 市场现状分析与发展前景预测
  9. 债务回收解决方案行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
  10. 2021-2025年中国超声检查台行业市场供需与战略研究报告