Android大作业
一、题目要求
本次大作业2道题。
第1题 网络通信程序。
用PC作服务器、移动端作客户机,编程实现服务器和客户端的非阻塞通信。
第2题 图形变换。
有若干个点、线段、圆和三角形,对这些图形进行平移和绕任意的旋转变换。如:
对点的操作:
对线段的操作:
对圆的操作:
对三角形的操作:
如果是旋转操作,则要给出旋转参考点和角度,如:
输入相应的数据后,要用另外一个Activity进行变换计算,如:
点击按钮“用另一个ACTIVITY完成变换计算”,则切换到另一个ACTIVITY:
按“变换”后:
按“返回”后:
二、实现过程
第1题
一、 分析与设计
本题要实现PC端作服务器和android端作客户端之间的非阻塞通信。(从android端发送一条信息到PC端,PC端可以接受,并可以把这条信息返回到android端并且显示出来。)
首先基于TCP协议在Android终端和PC两端之间形成网络虚拟链路。使用ServerSocket创建TCP服务器端,然后在Android客户端使用Socket的构造器来连接服务器。
1、PC服务器启用ServerSocket
两个通信实体在建立虚拟链路之前,需要有一方先准备好,主动接受来自其他通信实体的连接请求。使用ServerSocket对象监听来自客户端的Socket连接。 如果没有连接,则将一直处于等待状态。
2、Android终端使用Socket通信
客户端使用Socket的构造器连接服务器,指定服务器IP和端口号就可以了。
IP为无线局域网适配器 WLAN的IPv4 地址
Socket s = new Socket(“192.168.43.190”, 12345);
这样服务器端的accept()方法就得到响应,从而向下执行,服务器端和客户端就形成了一对互相连接的Socket。再进行通信时就没有服务器和客户端之分了,都是通过输入输出流进行通信。
注意点:
1、由于程序里面需要Socket进行网络通信,所有程序里面只需要一个Socket,切不可使用多个Socket,既Socket的new对象只需要一个就好了。
2、记得要在android中添加访问网络的权限
3、在android端中没有流和socket的关闭,在PC使用的是ServerSocket;android端使用的是Socket
4、只有客户端发送了信息给服务器后,服务器才能响应客户端的输入,然后返回信息给客户端,这时客户端才能读取服务器返回的信息。如果客户端和服务器都处于等待对方的信息,那样就会造成阻塞,导致ANR了。
二、 程序结构
MainActivity.java
TcpSocketServer.java
三、实现方法
socket是指在一个特定编程模型下,进程之间通信链路的端口。一个socket包括两个流,一个输入流和一个输出流。
实现思路
1、服务器分配一个端口号,监听端口是否有连接请求。如果客户端请求一个连接,服务器使用accept()方法打开socket连接。
2、客户在host的port端口建立连接。
3、服务器和客户使用InputStream和OutputStream进行通信。
服务器端ServerSocket的实现
在该实例中,我们在Eclipse中新建了一个Java工程作为服务器端。在该Java工程中,我们应该完成以下的操作。
(1)指定端口实例化一个ServerSocket,并调用ServerSocket的accept()方法在等待客户端连接期间造成阻塞。
(2)每当接收到客户端的Socket请求时,服务器端也相应的创建一个Socket,并将该Socket存入ArrayList中。与此同时,启动一个ServerThread线程来为该客户端Socket服务。
(3)在启动的newCachedThreadPool线程池的线程中,我们需要将读到的客户端内容(也就是某一个客户端Socket发送给服务器端的数据),发送给其他的所有客户端Socket,实现信息的广播。
客户端Socket的实现
(1)在Android工程中,创建一个客户端Socket,并在newCachedThreadPool线程池中启动一个客户端线程来监听服务器发来的数据。
(2)利用Runnable自定义线程
Runnable创建步骤:
- 自定义一个类实现Runnable接口。
- 实现Runnable接口 的run方法,把自定义线程的任务定义在run方法上。
- 创建Runnable实现类对象。
四、运行与界面
第2题
一、 分析与设计
有若干个点、线段、圆和三角形,对这些图形进行平移和绕任意的点旋转变换。
由本题意可知,要实现四种图形点,线段,圆和三角形,和任意图形的两种变化(平移或旋转)
因为要实现动态页面设置,所有要实现一个主页面,一个计算界面,一个跳转页面,四个图形框,两个变化框。其中运用RadioGroup控件实现唯一选择,运用inflate函数把选择的图形布局和变化布局添加至主页面,然后再运用intent组件实现页面的跳转。
所有一个需要实现八个布局页面,两个java运行代码,主函数java用于输入数据,跳转页面,计算函数java用于计算变化图形,返回界面。
二、程序结构
三、实现方法
要实现RadioButton由两部分组成,也就是RadioButton和RadioGroup配合使用,其中RdioGroup是单选组合框,可以容纳多个RadioButton的一个容器。在没有RadioGroup的情况下,RadioButton可以全部被选中;当多个RadioButton被RadioGroup包含的情况下,RadioButton只可以选择一个,从而达到了单选的目的。并用setOnCheckChangeLinstener()来对单选按钮进行监听。
inflate函数的作用
作用一:可以获取某个xxx.xml布局文件,这个函数的返回值就是获取的布局文件
findViewById()函数是获取布局文件中的某个控件,这个函数就是获取布局文件。
作用二:将布局文件添加到某个布局中。
使用Intent能够使程序在不同活动中跳转,意及能够使用不同界面。Intent用法分为显示和隐式。
Intent概念:Intent是Android程序中各组件之间进行交互的一种重要方式,不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。
Intent一般可被用于启动活动、启动服务、以及发送广播等场景
四、运行与界面
对点的平移操作:
对线段的平移操作:
对圆的平移操作:
对三角形的旋转操作:
五、文档撰写
代码:
MainActivity.java:通过inflate函数通过点击单选按钮实现布局的添加,然后输入数据,传入数据并跳转页面至main_ac.java。
main_ac.java:接收MainActivity.java传至的数据,并进行处理,然后按照之前的选择,对数据进行平移或旋转操作,并显示原始图形数据,和变化后的数据,实现计算功能和跳转页面功能。
布局:
activity_main.xml:添加三个文本框,添加一个单选框四个单选按钮,添加一个单选框两个单选按钮,添加一个按钮用于跳转页面。
main.xml:添加两个文本框用于显示原始图形,再添加两个文本框用于显示变化后的图形,添加一个按钮用于计算得到变化后的图形,添加一个按钮用于返回至acticity_main.xml页面。
dian.xml:添加文本框和输入框,实现点的坐标的输入。
xianduan.xml: 添加两个文本框和输入框,实现起点的坐标和终点坐标的输入。
yuan.xml: 添加两个文本框和输入框,实现圆的坐标和圆的半径的输入。
sanjiaoxing.xml: 添加三个文本框和输入框,实现三角形的三个坐标的输入。
pingpy.xml: 添加文本框和输入框,实现x和y平移量的输入。
xuanzhuan.xml: 添加两个文本框和输入框,实现旋转参考点的坐标和旋转角度的输入。
三、大作业报告及源码