# 2017-2018-20172309 暑期编程作业:APP
2017-2018-20172309 暑期编程作业:基于有道词典API的翻译软件的实现。
- 写在前面:这个博客可以说是拖了很久了。因为做这个APP已经很久了,很多东西都已经忘记了,所以一直都懒得写。但是这个总是要做的,所以现在还是写一下吧。我觉得这个APP有点弱智,希望不要喷
作品展示:
整体展示:
- 作品展示:


- 安装包地址:密码:kl8c
细节展示:
首先我们可以看到的是这个app的图标:

- 这个文件是配置在res/mipmap/icon.png下的,为了简便,我们直接把原来的图标替换掉.

- 我们需要注意的是:因为在项目中引用这张图片的名字是原来图片的命名,所以我们必须把后面替换的图片名字也改成原来一样的.
- 当然你可以选择用你喜欢的命名,只要把项目中引用的名字一同修改就OK啦。位置在这:

- 这个文件是配置在res/mipmap/icon.png下的,为了简便,我们直接把原来的图标替换掉.
然后我们点进去以后就可看到:进入动画~
比如这样:

我们多进去几次可以看到:

和这样


等等等等····实现方法下面说~不过我们得注意:需要隐藏状态栏。

等进去动画完毕后,就进入主页面——翻译页面。
- 首先看到的是背景图片:

- 其次就是几个UI——输入框、按钮。
- 待我们输入单词后,我们可以看到又出来一个动画:

最后得补充几个细节:
- 开局动画必须把状态框去掉,不然特别丑!!
- 一开始出现气泡:此APP暂只支持英译汉
- 当用户不输入数据直接点翻译按钮,将报错:输入不能为空。
- 当用户输入的不是一个单词、或者是不完整的单词时,报错:暂未查到该单词!
制作之前的准备工作:
制作前的准备工作大概就是思考应该制作一个什么样的APP啦,老师布置作业的时候说可以做一个表白样式的APP,然后去网上找了一下教程,上面有很多
- 像这样:

- 像这样

真的是太多了,但是之后仔细去深究,发现对我来说是有点难的,再说,我做一个这个也没啥用啊.
- 像这样:
因此我就准备找一个简单的,适合我的来做。之后在慕课网上,找到了一个做词典的,感觉这个不错,但是那上面做的太复杂,很多东西只要用Rxvolley网络框架就OK了。
制作过程
主功能的实现:
- 我们的主功能当然还是实现翻译啦:
- 嘿嘿,当初很多同学看到我这个APP问是不是写一个字典TXT文本存到手机里面去,然后翻译的时候选择搜索?现在统一回复,不是的
- 这个软件是基于有道词典api,实现自动翻译的。
- 首先我们得申请这么一个api:申请地址
- 申请完api后我们得到这么个东西:
"http://fanyi.youdao.com/openapi.do?keyfrom=aaa123ddd&key=336378893&type=data&doctype=json&version=1.1&q=",这是个什么东西呢?我们只要把要翻译的单词或句子放到后面在网页上搜索就OK啦。

比如:“http://fanyi.youdao.com/openapi.do?keyfrom=aaa123ddd&key=336378893&type=data&doctype=json&version=1.1&q=”+“plot”
得到了这个:
{
"translation": [
"情节"
],
"basic": {
"us-phonetic": "plɑt",
"phonetic": "plɒt",
"uk-phonetic": "plɒt",
"explains": [
"n. 情节;图;阴谋",
"vt. 密谋;绘图;划分;标绘",
"vi. 密谋;策划;绘制",
"n. (Plot)人名;(捷)普洛特;(法)普洛"
]
},
"query": "plot",
"errorCode": 0,
"web": [
{
"value": [
"情节",
"标绘",
"密谋"
],
"key": "Plot"
},
{
"value": [
"漏斗图",
"倒漏斗图",
"漏斗图"
],
"key": "Funnel plot"
},
{
"value": [
"四大门派"
],
"key": "Shaolin Plot"
}
]
}
```
- 之后我们所需要做的就是把这些数据转换成平常人可以看得懂的数据就行啦!
private void eJson(String json){
try{
JSONObject jsonObject = new JSONObject(json);
JSONObject object = jsonObject.getJSONObject("basic");
String s="美式发音"+ object.getString("us-phonetic")+"\n"+
"英式发音"+object.getString("uk-phonetic")+"\n"+
"释义:"+"\n"+object.getString("explains")+"\n"+"网络释义:"+"\n";
JSONArray ja = jsonObject.getJSONArray("web");
for (int i = 0; i < ja.length(); i++) {
JSONObject jsonObject3 = (JSONObject) ja.get(i);
s=s+jsonObject3.getString("value")+"\n";
s=s+jsonObject3.getString("key")+"\n";
}
if (s==null)
Toast.makeText(MainActivity.this, "暂未查询到该单词!", Toast.LENGTH_LONG).show();
//在顶部显示
mean.setText(s);
}
catch (Exception e){
e.printStackTrace();
}
}
页面的美化:
- 开启动画的添加:使用随机数,得到随机图片。
- 首先得把图片加到文件夹里:

- 然后创建一个startActivity:
- 首先获取随机图片:
int [] hhh ={R.drawable.start1,R.drawable.start2,R.drawable.start3,R.drawable.start4,R.drawable.start5,R.drawable.start6};
Random random = new Random();
int i =random.nextInt(6)+1;
iv_start = (ImageView) findViewById(R.id.iv_start);
- 然后对图片进行缩放:
iv_start.setImageResource(hhh[i]);
//进行缩放动画
ScaleAnimation scaleAnimation = new ScaleAnimation(1.4f, 1.0f, 1.4f, 1.0f, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
scaleAnimation.setDuration(4000);
//动画播放完成后保持形状
scaleAnimation.setFillAfter(true);
scaleAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
//可以在这里先进行某些操作
} @Override
public void onAnimationEnd(Animation animation) {
startActivity();//一进来就先自动显示这个activity
} @Override
public void onAnimationRepeat(Animation animation) { }
});
iv_start.startAnimation(scaleAnimation);
- 首先得把图片加到文件夹里:
- 第二部分就是,点击按钮后的动画。
- 在点击事件中添加:
// 能成功翻译时,启动动画。
imageView.setVisibility(View.VISIBLE); Animation al = new AlphaAnimation(1.0f, 0.0f);
al.setDuration(1500);//设置动画持续时间为500毫秒
al.setFillAfter(false);//设置动画结束后保持当前的位置(即不返回到动画开始前的位置) al.setAnimationListener(new Animation.AnimationListener() { public void onAnimationStart(Animation animation) {
// TODO Auto-generated method stub } public void onAnimationEnd(Animation animation) {
// TODO Auto-generated method stub
imageView.setVisibility(View.GONE); } public void onAnimationRepeat(Animation animation) {
// TODO Auto-generated method stub } }); imageView.startAnimation(al);
后面想到待实现的一些功能:
- 版本号,软件介绍。
- 查单词的历史记录。
- 实现账号登录。
- 像扇贝单词一样的每日一句功能。
反思与总结
- 通过实现这个APP我学会了很多,比如从最基本的怎么创建一个项目、怎么创建一个activity到后面的怎么设计UI,怎么让自己的软件更加美观等等等,做完这个APP很开心,毕竟作业是做完了。但这个人间有一个缺点就是没有与我们学过的结合起来。不过我现在想到一个可以运用到做完这个软件以后学到的东西——基于队列实现的历史记录,历史记录是有大小约束的,比如只能储存20个,那么那些最早的记录就应该被清除出去。
参考文献
# 2017-2018-20172309 暑期编程作业:APP的更多相关文章
- 2017-2018-20172311 暑期编程作业:APP
2017-2018-20172311 暑期编程作业:实现一个简单倒计时APP 写在前面:暑假的时候就单纯的想要设计一个倒计时软件,然后就通过查阅资料等学了一些,包括实现倒计时功能及显示:背景音乐的添加 ...
- java数据结构和算法编程作业系列篇-数组
/** * 编程作业 2.1 向highArray.java程序(清单2.3)的HighArray类添加一个名为getMax()的方法,它返回 数组中最大关键字的值,当数组为空时返回-1.向main( ...
- 20172321 20172333 2017-2018 暑假作业APP
20172321 20172333 2017-2018 暑假作业APP 项目介绍 项目成员 吴恒佚 20172321 严域俊 20172333 项目简介 从理论上来说,这是一个贪吃蛇游戏. <贪 ...
- </2017><2018>
>>> Blog 随笔原始文档及源代码 -> github: https://github.com/StackLike/Python_Note >>> 统计信 ...
- 【BUAA软工】结对编程作业
项目 内容 课程:2020春季软件工程课程博客作业(罗杰,任健) 博客园班级链接 作业:BUAA软件工程结对编程项目作业 作业要求 课程目标 学习大规模软件开发的技巧与方法,锻炼开发能力 作业目标 完 ...
- Stanford coursera Andrew Ng 机器学习课程编程作业(Exercise 2)及总结
Exercise 1:Linear Regression---实现一个线性回归 关于如何实现一个线性回归,请参考:http://www.cnblogs.com/hapjin/p/6079012.htm ...
- stanford coursera 机器学习编程作业 exercise 3(逻辑回归实现多分类问题)
本作业使用逻辑回归(logistic regression)和神经网络(neural networks)识别手写的阿拉伯数字(0-9) 关于逻辑回归的一个编程练习,可参考:http://www.cnb ...
- (转)Android如何编程设置APP安装位置(外部存储或内部存储)?
Beginning with API Level 8, you can allow your application to be installed on the external storage ( ...
- 10款无需编程的App DIY开发工具
10款无需编程的App DIY开发工具 你有一个很棒的创意但不会编程怎么办?外包.合伙开发还是从零学编程?这里提供另外一种方式--使用无需编程的App DIY开发工具.DIY开发工具不仅节省了开发时 ...
随机推荐
- Google-403-Forbidden
Author:KillerLegend Date:2014.8.14 From:http://www.cnblogs.com/killerlegend/p/3913554.html www.googl ...
- Linux命令(七)Linux用户管理和修改文件权限
1. 用户管理 1.1 创建用户/设置密码/删除用户 (-m很重要,自动添加用户家目录) 创建用户组dev, 给用户组dev新建xiaoqin用户,给新用户设置密码! 1.2 查看用户信息 1.3 设 ...
- centos7配置上网
过程请看图: just so so!
- 开启SSI配置使shtml支持include公用的页头页脚
编写编写项目众多静态文件时,能像php等开发语言一样使用include将页面公有的header/footer/sidebar作为公用.独立.单一的文件引入到各页面上,这样修改这些页面公用部分时就能单独 ...
- 20155310 2016-2017-2 《Java程序设计》第五周学习总结
20155310 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 •收集对象的行为,像是新增对象的add()方法.移除对象的remove()方法等,都是定义在 ...
- [BZOJ 1013][JSOI 2008] 球形空间产生器sphere 题解(高斯消元)
[BZOJ 1013][JSOI 2008] 球形空间产生器sphere Description 有一个球形空间产生器能够在n维空间中产生一个坚硬的球体.现在,你被困在了这个n维球体中,你只知道球 面 ...
- HDU 2066 一个人的旅行 最短路问题
题目描述:输入的第一行有三个数,T,S,D,T表示一共有多少条线路,S表示起点的个数,D表示终点的个数,接下来就是输入T条路的信息了,要你判断从多个起点中任意一个到多个终点中的任意的一个的最短距离是多 ...
- Spark笔记之使用UDAF(User Defined Aggregate Function)
一.UDAF简介 先解释一下什么是UDAF(User Defined Aggregate Function),即用户定义的聚合函数,聚合函数和普通函数的区别是什么呢,普通函数是接受一行输入产生一个输出 ...
- 使用phpstorm+wamp实现php代码实时调试审计
转载自:https://www.bugbank.cn/q/article/5853afaffc0bf4f010ee6ac3.html php调试有N多好用的工具,最近研究到phpstorm配合wamp ...
- git使用常用命令
第一部分:个人整理部分(读<Git教程By廖雪峰.pdf>笔记) /* 配置全局参数 */git config --global user.name "username" ...